美文网首页
书生·浦语大模型实战营作业-第四课

书生·浦语大模型实战营作业-第四课

作者: 银河星尘 | 来源:发表于2024-02-14 20:03 被阅读0次

    第一步,SSH远程连接

    复制远程连接命令


    复制远程连接命令

    在本地电脑上执行


    在本地电脑上执行
    连接上远程服务器
    连接上远程服务器

    环境创建

    # 创建conda虚拟环境
    conda create --name xtuner0.1.9 python=3.10 -y
    # 激活环境
    conda activate xtuner0.1.9
    # 进入家目录 (~的意思是 “当前用户的home路径”)
    cd ~
    # 创建版本文件夹并进入,以跟随本教程
    mkdir xtuner019 && cd xtuner019
    

    拉取项目代码

    # 拉取 0.1.9 的版本源码
    git clone -b v0.1.9  https://github.com/InternLM/xtuner
    # 无法访问github的用户请从 gitee 拉取:
    # git clone -b v0.1.9 https://gitee.com/Internlm/xtuner
    # 进入源码目录
    cd xtuner
    # 从源码安装 XTuner
    pip install -e '.[all]'
    

    数据集准备工作(在 oasst1 数据集上微调 internlm-7b-chat)数据集下载

    # 创建一个微调 oasst1 数据集的工作路径,进入
    mkdir ~/ft-oasst1 && cd ~/ft-oasst1
    
    # ...-guanaco 后面有个空格和英文句号啊
    cp -r /root/share/temp/datasets/openassistant-guanaco .
    # 开放平台已经提前下载好了,复制到正确位置即可
    

    微调

    获取XTuner的配置文件

    # 注意最后有个英文句号,代表复制到当前路径
    cd ~/ft-oasst1
    xtuner copy-cfg internlm_chat_7b_qlora_oasst1_e3 .
    

    修改配置文件

    修改其中的模型和数据集为 本地路径

    cd ~/ft-oasst1
    vim internlm_chat_7b_qlora_oasst1_e3_copy.py
    

    修改内容

    # 修改模型为本地路径
    - pretrained_model_name_or_path = 'internlm/internlm-chat-7b'
    + pretrained_model_name_or_path = './internlm-chat-7b'
    
    # 修改训练数据集为本地路径
    - data_path = 'timdettmers/openassistant-guanaco'
    + data_path = './openassistant-guanaco'
    

    常用超参

    参数名 解释
    data_path 数据路径或 HuggingFace 仓库名
    max_length 单条数据最大 Token 数,超过则截断
    pack_to_max_length 是否将多条短数据拼接到 max_length,提高 GPU 利用率
    accumulative_counts 梯度累积,每多少次 backward 更新一次参数
    evaluation_inputs 训练过程中,会根据给定的问题进行推理,便于观测训练状态
    evaluation_freq Evaluation 的评测间隔 iter 数

    备注

    XTuner提供多个开箱即用的配置文件

    # 列出XTuner所有内置配置
    xtuner list-cfg
    

    配置文件名的定义

    internlm_chat_7b_qlora_oasst1_e3

    模型名 internlm_chat_7b
    使用算法 qlora
    数据集 oasst1
    把数据集跑几次 跑3次:e3 (epoch 3 )

    *无 chat比如 internlm-7b 代表是基座(base)模型


    多个开箱即用的配置文件

    模型下载

    在InternLM开发平台上

    软链方式

    ln -s /share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/
    

    以上是通过软链的方式,将模型文件挂载到家目录下,优势是:

    1. 节省拷贝时间,无需等待
    2. 节省用户开发机存储空间

    数据拷贝方式

    cp -r /share/temp/model_repos/internlm-chat-7b ~/ft-oasst1/
    

    从ModelScope下载模型到本地

    # 创建一个目录,放模型文件,防止散落一地
    mkdir ~/ft-oasst1/internlm-chat-7b
    
    # 安装拉取模型文件要用的库
    pip install modelscope
    
    # 从 modelscope 下载下载模型文件
    cd ~/ft-oasst1
    apt install git git-lfs -y
    git lfs install
    git lfs clone https://modelscope.cn/Shanghai_AI_Laboratory/internlm-chat-7b.git -b v1.0.3
    

    开始微调

    训练:

    xtuner train ${CONFIG_NAME_OR_PATH}
    

    也可以增加 deepspeed 进行训练加速:

    xtuner train ${CONFIG_NAME_OR_PATH} --deepspeed deepspeed_zero2
    

    利用 QLoRA 算法在 oasst1 数据集上微调 InternLM-7B:

    # 单卡
    ## 用刚才改好的config文件训练
    xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py
    
    # 多卡
    NPROC_PER_NODE=${GPU_NUM} xtuner train ./internlm_chat_7b_qlora_oasst1_e3_copy.py
    
    # 若要开启 deepspeed 加速,增加 --deepspeed deepspeed_zero2 即可
    

    微调得到的 PTH 模型文件和其他杂七杂八的文件都默认在当前的 ./work_dirs 中。

    将得到的 PTH 模型转换为 HuggingFace 模型,即:生成 Adapter 文件夹

    xtuner convert pth_to_hf ${CONFIG_NAME_OR_PATH} ${PTH_file_dir} ${SAVE_PATH}
    
    mkdir hf
    export MKL_SERVICE_FORCE_INTEL=1
    export MKL_THREADING_LAYER=GNU
    xtuner convert pth_to_hf ./internlm_chat_7b_qlora_oasst1_e3_copy.py ./work_dirs/internlm_chat_7b_qlora_oasst1_e3_copy/epoch_1.pth ./hf
    

    hf 文件夹即为我们平时所理解的所谓 “LoRA 模型文件”
    可以简单理解:LoRA 模型文件 = Adapter

    部署与测试

    将 HuggingFace adapter 合并到大语言模型:

    xtuner convert merge ./internlm-chat-7b ./hf ./merged --max-shard-size 2GB
    # xtuner convert merge \
    #     ${NAME_OR_PATH_TO_LLM} \
    #     ${NAME_OR_PATH_TO_ADAPTER} \
    #     ${SAVE_PATH} \
    #     --max-shard-size 2GB
    

    与合并后的模型对话:

    # 加载 Adapter 模型对话(Float 16)
    xtuner chat ./merged --prompt-template internlm_chat
    
    # 4 bit 量化加载
    # xtuner chat ./merged --bits 4 --prompt-template internlm_chat
    

    Demo

    修改 cli_demo.py 中的模型路径

    - model_name_or_path = "/root/model/Shanghai_AI_Laboratory/internlm-chat-7b"
    + model_name_or_path = "merged"
    

    运行 cli_demo.py 以目测微调效果

    python ./cli_demo.py
    

    相关文章

      网友评论

          本文标题:书生·浦语大模型实战营作业-第四课

          本文链接:https://www.haomeiwen.com/subject/cvosadtx.html