InternVL2-8B模型MindSpeed-MM微调训练
如果转换权重过程中遇到包缺失,按照提示安装即可(如果timm缺失,安装过程中会自动将torch与torchvision更新,会导致与torch_npu版本不兼容,将torch降至2.1版本,将torchvison降至0.14.1版本即可)同步修改examples/internvl2/finetune_internvl2_8b.sh中的LOAD_PATH参数,该路径为转换后或者切分后的权重,注意与原
1. 环境安装与下载

环境对照表
1.1 仓库拉取
拉取MindSpeed-MM和Megatron-LM
git clone https://gitee.com/ascend/MindSpeed-MM.git
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout core_r0.6.0
cp -r megatron ../MindSpeed-MM/
cd ..
cd MindSpeed-MM
mkdir logs
mkdir dataset
mkdir ckpt
1.2 创建python环境
创建一个python3.10版本的环境
conda create -n test python=3.10
conda activate test
如果在docker镜像中没有conda,可以输入如下指令确认当前服务器架构
uname -m
我的服务器是arm架构,则可以输入如下指令安装Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-aarch64.sh
bash Miniconda3-latest-Linux-aarch64.sh
配置环境变量
source ~/.bashrc
再创建python环境即可
conda create -n test python=3.10
conda activate test
1.3 安装Torch、Torch_npu及Apex
安装Torch2.1版本(arm架构)
pip3 install torch==2.1.0
安装Torch_npu依赖
pip3 install pyyaml
pip3 install setuptools
安装Torch_npu
pip3 install torch-npu==2.1.0.post10
Torch与Torch_npu也可在如下链接中下载安装(选择合适的版本)
快速安装-配置与安装-Ascend Extension for PyTorch6.0.RC3开发文档-昇腾社区
获取昇腾适配的Apex-patch源码
git clone -b master https://gitee.com/ascend/apex.git
cd apex/
编译apex的二进制包(请确保torch已安装,setuptools版本小于等于65.7.0)
bash scripts/build.sh --python=3.10
过程中会自动拉取apex官方源码,请保证网络畅通。如果系统提示:
![]()
git命令未找到
无法使用git命令是因为容器内没有安装git,解决方法是在容器中安装git
apt update
apt install -y git
编译apex的二进制包
bash scripts/build.sh --python=3.10
1.4 安装加速库
安装MindSpeed加速库
git clone https://gitee.com/ascend/MindSpeed.git
cd MindSpeed
git checkout ab39de78be23e88e2c8b0d25edf6135940990c02
出现如下所示表示验证成功
![]()
安装依赖
pip install -r requirements.txt
pip3 install -e .
cd ..
替换MindSpeed中的文件
cp MindSpeed-MM/examples/internvl2/dot_product_attention.py MindSpeed/mindspeed/core/transformer/dot_product_attention.py
安装其余依赖库
pip install -e .
2. 下载权重与权重转换
下载InternVL2-8B权重到raw-ckpt文件夹中
cd MindSpeed-MM
mkdir raw-ckpt
cd raw-ckpt
git lfs install
git clone https://www.modelscope.cn/OpenGVLab/InternVL2-8B.git
如果转换权重过程中遇到包缺失,按照提示安装即可(如果timm缺失,安装过程中会自动将torch与torchvision更新,会导致与torch_npu版本不兼容,将torch降至2.1版本,将torchvison降至0.14.1版本即可)

同步修改examples/internvl2/finetune_internvl2_8b.sh中的LOAD_PATH参数,该路径为转换后或者切分后的权重,注意与原始权重raw-ckpt/InternVL2-8B进行区分
LOAD_PATH="pretrained/InternVL2-8B"
3. 数据集准备及处理
进入当前目录下dataset文件夹,创建playground文件夹,下载InternVL-Finetune数据集
git clone https://www.modelscope.cn/datasets/OpenGVLab/InternVL-Chat-V1-2-SFT-Data.git
自行解压数据集并将数据结构调整成如下所示:

4. 微调训练
4.1 配置参数
根据实际情况修改examples/internvl2/data_8B.json中的数据集路径,包括from_pretrained、data_path、data_folder等字段

根据实际情况配置examples/internvl2/finetune_internvl2_8B.sh的参数,包括load_path、save_path、log-interval、save-interval等字段

单机运行配置examples/internvl2/finetune_internvl2_8B.sh参数如下
# 根据实际情况修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
NPUS_PER_NODE=8
MASTER_ADDR=locahost
MASTER_PORT=6000
NNODES=1
NODE_RANK=0
WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES))
4.2 启动微调
bash examples/internvl2/finetune_internvl2_8B.sh
如下图所示,训练成功(注:占用显存大,启动微调前确认服务器拥有足够空间)训练成功

4.3 参考性能

InternVL2性能参考对照表
sps(samples per second),一秒训练多少个数据,计算方式是 gbs(global batch size) / 每步耗时(elapsed time per iteration(s))
参考链接:
https://gitee.com/ascend/MindSpeed-MM/tree/master/examples/internvl2
更多推荐
所有评论(0)