迁移前准备
Deepspeed_npu是昇腾基于Microsoft DeepSpeed的适配插件,用户可使用该插件,配合原生DeepSpeed,在NPU上使用其分布式特性。当前Deepspeed_npu已适配其流水并行、ZeRO、重计算、MoE等主要特性。使用DeepSpeed训练的大模型,如LLaMA、LLaMA-2、Baichuan等。
- 单击Link下载LLaMA-Factory代码仓压缩包并上传至服务器任意目录并解压,例如“/home”。
├──home ├──LLaMA-Factory ├── assets ├── data // 预训练所需数据集所在目录 ├── ... ├── src ├── llmtuner ├── api ├── ... ├── extras ├── misc.py └── ... └── ... └── train_bash.py ├── Makefile ├── model_weight // 自定义目录,存放模型配置文件和权重文件 └── setup.py
- 准备预训练权重文件。用户单击Link自行获取模型配置文件和权重文件,并放于LLaMA-Factory代码仓的自定义目录下,如model_weight,目录结构如下:
├──model_weight ├── config.json ├── configuration_baichuan.py ├── generation_config.json ├── modeling_baichuan_origin.py ├── modeling_baichuan.py ├── pytorch_model-00001-of-00003.bin ├── pytorch_model-00002-of-00003.bin ├── pytorch_model-00003-of-00003.bin ├── pytorch_model.bin.index.json ├── quantizer.py ├── requirements.txt ├── special_tokens_map.json ├── tokenization_baichuan.py ├── tokenizer_config.json └── tokenizer.model
- 当前模型支持的 PyTorch 版本和已知三方库依赖如下表所示。
表1 支持的配套版本 软件
版本
PyTorch
2.0
transformers
4.31.0
accelerate
0.21.0
python
≥3.8.0
- 执行如下命令安装依赖。
pip install -r requirements.txt
- 安装deepspeed模型套件。
- 此章节示例的模型为Atlas 训练系列产品上进行迁移的模型,如5所示命令,需要安装原生deepspeed和deepspeed_npu插件。
- Atlas A2 训练系列产品上进行迁移的模型,deepspeed已原生支持昇腾NPU,仅需按照如下命令安装最新版deepspeed即可:
pip3 install deepspeed
安装原生deepspeed,执行如下命令:pip3 install deepspeed==0.9.2
安装deepspeed_npu插件,执行如下命令:git clone https://gitee.com/ascend/DeepSpeed.git cd DeepSpeed pip3 install .
- 检测python包并安装对应版本。
pip install trl==0.7.2 pip install transformers==4.31.0 pip install transformers_stream_generator decorator absl-py cloudpickle synr==0.5.0 tornado
- 修改deepspeed版本检测。
- 注释 ${conda环境路径}/lib/python3.8/site-packages/transformers/deepspeed.py 的deepspeed版本检测代码,如下所示:
def __init__(self, config_file_or_dict): # set global weakref object set_hf_deepspeed_config(self) dep_version_check("accelerate") dep_version_check("deepspeed") super().__init__(config_file_or_dict) ...
- 将 ${conda环境路径}/lib/python3.8/site-packages/accelerate/accelerator.py 修改为if compare_versions("deepspeed", "<", "0.9.2"),如下所示:
... if deepspeed_plugin is None: # init from env variables deepspeed_plugin = ( DeepSpeedPlugin() if os.environ.get("ACCELERATE_USE_DEEPSPEED", "false") == "true" else None ) else: assert isinstance( deepspeed_plugin, DeepSpeedPlugin ), "`deepspeed_plugin` must be an `accelerate.utils.DeepSpeedPlugin` object." os.environ["ACCELERATE_USE_DEEPSPEED"] = "true" # use DeepSpeed if plugin is provided if deepspeed_plugin: if not is_deepspeed_available(): raise ImportError("DeepSpeed is not installed => run `pip install deepspeed` or build it from source.") if compare_versions("deepspeed", "<", "0.9.3"): raise ImportError("DeepSpeed version must be >= 0.9.3. Please update DeepSpeed.")
- 注释 ${conda环境路径}/lib/python3.8/site-packages/transformers/deepspeed.py 的deepspeed版本检测代码,如下所示:
父主题: 基于DeepSpeed的大模型迁移