打开微信,使用扫一扫进入页面后,点击右上角菜单,
点击“发送给朋友”或“分享到朋友圈”完成分享
一、环境搭建
用寒武纪官网发布的pytorch1.13 docker image搭建,发布地址:https://sdk.cambricon.com/download?sdk_version=V1.15.0&component_name=PyTorch
wget https://sdk.cambricon.com/static/PyTorch/MLU370_1.13_v1.17.0_X86_ubuntu18.04_python3.10_docker/pytorch-v1.17.0-torch1.13.1-ubuntu18.04-py310.tar.gz
参考示例导入docker镜像并启动容器。
二、准备模型
这里我们用LLaMA-2-7B作为 Model,下载链接:
https://huggingface.co/ -llama/Llama-2-7b-hf
三、安装依赖包:
(1)安装deepspeed
寒武纪基于官方的deepspeed做了二次开发,增加了MLU的后端,发布地址:https://sdk.cambricon.com/download?sdk_version=V1.15.0&component_name=Basis
wget https://sdk.cambricon.com/static/Basis/MLU370_X86_ubuntu18.04/deepspeed_mlu-0.9.0-py3-none-any.whl
但是寒武纪的deepspeed安装以后显示的Package Name并不是deepspeed,而是deepspeed-mlu,且版本号也不是deepspeed的版本,而是寒武纪的版本。这里我们需要修改Package的Name,避免transformer在检查deepspeed的时候找不到而报错:
mv /torch/venv3/pytorch/lib/python3.10/site-packages/deepspeed_mlu-0.9.0.dist-info/ /torch/venv3/pytorch/lib/python3.10/site-packages/deepspeed-0.10.2.dist-info/ vim /torch/venv3/pytorch/lib/python3.10/site-packages/deepspeed-0.10.2.dist-info/METADATA
将
Name: deepspeed-mlu Version: 0.9.0
改为
Name: deepspeed Version: 0.10.2
完成后,pip list | grep deepspeed检查是否修改成功。
(2)用代码本地安装transformers和accelerate的MLU版本
HuggingFace的transformers和accelerate,默认都把CUDA作为后端,所以这里我们不能直接用pip安装transformers和accelerate,这里需要用Cambricon PyTorch镜像中自带的torch_gpu2mlu.py工具将默认后端转为MLU,并用源码本地安装:
git clone https://github.com/huggingface/accelerate.git -b v0.21.0 python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i accelerate cd accelerate_mlu && pip install -e . && cd - git clone https://github.com/huggingface/transformers.git -b v4.31.0 python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i transformers cd transformers_mlu && pip install -e . && cd -
torch_gpu2mlu.py工具主要包含如下3个功能:
a) 将代码中的CUDA/GPU等关键字都替换为MLU
b) 将NCCL替换为CNCL
c) 在import torch的后边添加import torch_mlu,并在同级目录生成一个带"_mlu"后缀的目录。
如果你想查看torch_gpu2mlu.py到底改了什么,新的以_mlu为后缀的新目录中会包含一个report.md。
四、转换FastChat的源码,并启动训练
git clone https://github.com/lm-sys/FastChat.git python /torch/src/catch/tools/torch_gpu2mlu/torch_gpu2mlu.py -i FastChat cd FastChat_mlu torchrun --nproc_per_node=4 \ --master_port=20001 \ fastchat/train/train.py \ --model_name_or_path /datasets/Llama-2-7b-hf/ \ --data_path data/dummy_conversation.json \ --output_dir output_vicuna \ --num_train_epochs 3 \ --per_device_train_batch_size 2 \ --per_device_eval_batch_size 2 \ --gradient_accumulation_steps 16 \ --evaluation_strategy no \ --save_strategy steps \ --save_steps 1200 \ --save_total_limit 10 \ --learning_rate 2e-5 \ --weight_decay 0. \ --warmup_ratio 0.03 \ --lr_scheduler_type cosine \ --logging_steps 1 \ --model_max_length 2048 \ --gradient_checkpointing True \ --lazy_preprocess True \ --fp16 True \ --no_mlu False \ --deepspeed playground/deepspeed_config_s3.json
注:
(1)原生给出的Sample使用的是--bf16 True,由于MLU370对BF16支持还不完善,这里我们用--fp16 True替换。
(2)原生的例子使用的--no_gpu Faslse,由于这里我们已经把代码转为MLU,所以这里用--no_mlu False替换。
(3)原生的例子使用的脚本为fastchat/train/train_mem.py,但是train_mem.py需要flash-attention的支持,我们这里没有安装falsh-attention,所以我们替换为fastchat/train/train.py。
(4)原生的例子没有启动deepspeed,这里我们启用了deepspeed。
(5)这里有4张卡,所以指定了--nproc_per_node=4。
热门帖子
精华帖子