2024-09-01
深度学习
00

目录

环境准备
启动容器并安装 SWIFT
模型推理
图片微调
自定义数据集
Web UI 操作
Swift SFT 重要参数解释
训练实例
印章数据制作
训练效果

本文将为您介绍如何在 Ubuntu 环境下使用 Docker 拉取 ModelScope 镜像并进行模型推理和微调miniCPM2.6。以下是详细步骤。

环境准备

首先,确保您的环境已经安装了 Docker。然后,拉取指定的 ModelScope 镜像:

bash
docker pull modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.3.0-tf2.16.1-1.16.0

启动容器并安装 SWIFT

接下来,启动 Docker 容器并克隆 SWIFT 仓库:

bash
git clone https://github.com/modelscope/swift.git docker run -it --gpus device=1 -v /root/xiedong/swift:/root/xiedong/swift modelscope-registry.cn-beijing.cr.aliyuncs.com/modelscope-repo/modelscope:ubuntu22.04-cuda12.1.0-py310-torch2.3.0-tf2.16.1-1.16.0 bash cd /root/xiedong/swift pip install -e .[llm]

使用 pip 命令安装不同版本的 SWIFT:

bash
# 全量能力 pip install 'ms-swift[all]' -U # 仅使用 LLM pip install 'ms-swift[llm]' -U # 仅使用 AIGC pip install 'ms-swift[aigc]' -U # 仅使用 Adapters pip install ms-swift -U

模型推理

在准备好环境之后,您可以使用以下命令进行模型推理:

bash
CUDA_VISIBLE_DEVICES=0 swift infer \ --model_type minicpm-v-v2_6-chat \ --model_id_or_path /root/xiedong/swift/MiniCPM-V-2_6

以下是一些推理示例:

bash
<<< 你好 你好!今天我能为您提供什么帮助?
bash
<<< <image>描述这张图片 Input an image path or URL <<< http://modelscope-open.oss-cn-hangzhou.aliyuncs.com/images/cat.png

图片微调

我们可以使用 coco-en-mini 数据集对模型进行微调,该数据集的任务是对图片内容进行描述。

使用多张 GPU 卡:

bash
CUDA_VISIBLE_DEVICES=0,1,2,3 NPROC_PER_NODE=4 swift sft \ --model_type minicpm-v-v2_6-chat \ --model_id_or_path OpenBMB/MiniCPM-V-2_6 \ --sft_type lora \ --dataset coco-en-mini#20000 \ --deepspeed default-zero2

使用单张 GPU 卡:

bash
CUDA_VISIBLE_DEVICES=0 NPROC_PER_NODE=1 swift sft \ --model_type minicpm-v-v2_6-chat \ --model_id_or_path /root/xiedong/swift/MiniCPM-V-2_6 \ --sft_type lora \ --dataset coco-en-mini#20000 \ --deepspeed default-zero2

自定义数据集

如果要使用自定义数据集,只需按以下方式进行指定:

bash
--dataset train.jsonl \ --val_dataset val.jsonl \

自定义数据集支持 JSON 和 JSONL 样式,以下是自定义数据集的样例:

json
{"query": "<image>55555", "response": "66666", "images": ["image_path"]} {"query": "eeeee<image>eeeee<image>eeeee", "response": "fffff", "history": [], "images": ["image_path1", "image_path2"]} {"query": "EEEEE", "response": "FFFFF", "history": [["query1", "response2"], ["query2", "response2"]], "images": []}

微调后推理脚本如下:

bash
CUDA_VISIBLE_DEVICES=0 swift infer \ --ckpt_dir output/minicpm-v-v2_6-chat/vx-xxx/checkpoint-xxx \ --load_dataset_config true --merge_lora true

Web UI 操作

启动 Web UI 以进行交互操作:

bash
docker run -it --gpus device=1 -v /root/xiedong/swift:/root/xiedong/swift --net host kevinchina/deeplearning:swift bash
bash
swift web-ui

Swift SFT 重要参数解释

在进行 LoRA 微调时,以下参数至关重要:

  • --model_type 模型类型
  • --model_id_or_path 模型ID或路径
  • --model_revision 模型版本
  • --sft_type SFT类型(可选:lora, full, longlora, adalora, ia3, llamapro, adapter, vera, boft, fourierft, reft)
  • --freeze_parameters 冻结参数
  • --tuner_backend 调优器后端(可选:swift, peft, unsloth)
  • --output_dir 输出目录
  • --seed 随机种子
  • --resume_from_checkpoint 从检查点恢复
  • --dtype 数据类型(可选:bf16, fp16, fp32, AUTO)
  • --train_backend 训练后端(可选:transformers, megatron)
  • --min_lr 最小学习率
  • --loss_name 损失名称
  • --dataset 数据集
  • --val_dataset 验证数据集
  • --sequence_parallel 序列并行
  • --lora_rank LoRA 排名
  • --lora_alpha LoRA Alpha
  • --lora_dropout LoRA丢弃率
  • --adam_beta1 Adam Beta1
  • --adam_beta2 Adam Beta2
  • --learning_rate 学习率
  • --weight_decay 权重衰减
  • --num_train_epochs 训练轮数
  • --max_steps 最大步骤
  • --lr_scheduler_type 学习率调度类型
  • --save_steps 保存步骤
  • --eval_steps 验证步骤
  • --logging_steps 日志记录步骤
  • --per_device_train_batch_size 每设备训练批量大小
  • --per_device_eval_batch_size 每设备验证批量大小

训练实例

以下是使用一张 GPU 卡进行训练的示例:

bash
CUDA_VISIBLE_DEVICES=0 NPROC_PER_NODE=1 swift sft \ --model_type minicpm-v-v2_6-chat \ --model_id_or_path /root/xiedong/swift/MiniCPM-V-2_6 \ --sft_type lora \ --dataset coco-en-mini#20000 \ --deepspeed default-zero2 --lora_rank 512 --lora_alpha 256

印章数据制作

(待补充)

训练效果

(待补充)

以上即为在 Ubuntu 环境下使用 ModelScope 进行模型推理与微调的全过程。希望本博客能够对您有所帮助!

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!