Llama3-8B-Instruct 是由 Meta 公司于 2024 年 4 月发布的 Llama 3 系列模型之一,是一款高效语言模型。它在保持较小规模(80 亿参数)的同时,通过优化架构和训练方法,实现了接近更大模型的性能。
1. 1台REX1032服务器(卡满插且卡均正常)。
2. 清微docker镜像:TX8100_REX1032_Release_v4.3.8.tar.gz。
3. Conda环境:opt.miniconda.tar.gz。
4. 工具链xla_tx8软件包:xla_1.3.0.tar.gz。
5. 模型、数据资源包:xla_modeldata.tar.gz。
xla_1.3.0.tar.gz解压后,示例目录如下:
ver_pkg为xla_tx8版本目录。
install_env.sh为部署环境的执行文件;
fine_script为微调文件夹,其中finetuning_onboard.sh为运行微调文件。
xla_modeldata.tar.gz解压后,示例目录如下:
dataset为微调数据文件目录。
Meta-Llama-3-8B-Instruct为模型权重文件目录。
注意:
1. 需要将压缩包xla_1.3.0.tar.gz和xla_modeldata.tar.gz放置在同一目录下进行解压操作。
2. xla_1.3.0.tar.gz中xxx代表具体的版本发布日期,在本文档中指代0307。
1. 使用终端工具ssh登录REX1032服务器
执行如下命令行:
# HOST_IP为REX1032服务器IP,用户需替换为实际IP地址数值 ssh -X user@HOST_IP
2. 解压压缩包
将opt.miniconda.tar.gz,TX8100_REX1032_Release_v4.3.8.tar.gz放至登录用户指定目录下,如用户根目录(~/,下文中绝对路径/login_home),并解压:
cd ~/ tar -xvf opt.miniconda.tar.gz
解压后得到miniconda目录。
解压docker镜像压缩包, 执行如下命令行:
sudo tar -zxf TX8100_REX1032_Release_v4.3.8.tar.gz
解压得到文件:
TX8100_REX1032_Release_v4.3.8.tar Tsm_driver_4.3.8_x86_64_installer.run
3) 加载docker镜像
执行如下命令行:
sudo docker load -i TX8100_REX1032_Release_v4.3.8.tar
Load完毕可以使用如下命令查看镜像是否load成功:
sudo docker images
4) 创建容器
执行如下命令创建容器:
sudo docker run -d --name txnn --ipc=host --privileged -v /dev:/dev -v /tmp:/tmp -v /lib/modules:/lib/modules -v /sys: /sys -v /login_home/xxx/miniconda/:/opt/miniconda -v /login_home/xxx/txnn_convert:/login_home/xxx/txnn_convert -v /login_home/xxx/txnn_infer/:/login_home/xxx/txnn_infer/ -w /login_home/xxx/txnn_infer hub.tsingmicro.com/tx8/v4.3.8
注意:章节资源准备中的压缩包均需要放在/login_home/xxx 目录下,挂载至容器内。
5) 配置环境变量
在容器内export 环境变量
export PATH="/opt/miniconda/bin:$PATH" # 首次设置需要用source进入conda,后面切换可以直接 conda activate tx8_base source activate tx8_xla_llama3
此时环境变量即可生效,不同conda环境对应说明如下:
tx8_base:基础环境;
tx8_xla_llama3:用于模型训练;
tx8_txnn:用于模型推理;
1. 解压压缩包
将xla_1.3.0.tar.gz放至登录用户指定目录下,如用户home目录(~/,下文中的绝对路径/login_home),并解压:
cd ~/ tar -xvf xla_1.3.0.tar.gz
解压后得到xla_1.3.0目录。
2 进入docker容器
执行如下命令进入容器:
sudo docker exec -it xla /bin/bash export PATH="/opt/miniconda/bin:$PATH" source activate tx8_xla_llama3
3. 执行环境部署脚本
执行install_env.sh脚本需要指定存放路径作为参数,例如存放在用户home路径下,示例如下
cd $HOME_PATH/xla_1.3.0/ bash install_env.sh
正确安装完成后会打印log:
4. 在当前目录,执行source /root/.bashrc,使得配置生效
source /root/.bashrc
用户在Host端部署执行环境,执行启动Device
拉起TX8 Device并等待ready,新开会话窗口2,执行如下命令:
./Tsm_driver_4.3.8_x86_64_installer.run install silicon
双机环境启卡步骤如下,分别登录两个服务器,新打开两个会话窗口,分别执行以下操作:
1) 登录后切换至root用户
sudo su
2) 使环境变量生效
source /etc/profile
3) 主从机配置
master机器执行
export TSINGMICRO_MASTER_HOST=master;
slave机器执行
export TSINGMICRO_MASTER_HOST=slave;
普通单机启动请不要设置这个环境变量。
4) 把Tsm_driver_4.3.8_x86_64_installer.run拷到这双机每台机器上。
docker cp “xla”:/lib/firmware/tx8/firmware/Tsm_driver_4.3.8_x86_64_installer.run ./
5) 启动Device
./Tsm_driver_4.3.8_x86_64_installer.run install
6) 在/lib/firmware/tx8/bin下找到一个txbm_host_config.json,修改如图一项,保证数量和ip准确(且保证master ip在第一个)。并把该文件拷到双机每台机器的/lib/firmware/tx8/bin下。
再修改global_card_x和global_card_y数量为8/8或者4/16(按连线来分辨卡数),如下图所示,左边这种连线方式,global_card_x和global_card_y数量为8/8,右边这种连线方式global_card_x和global_card_y数量为4/16。
7) 两台机器均启动Device
./Tsm_driver_4.3.8_x86_64_installer.run run silicon
8) 可以使用tsm_smi -n工具查看phy_id是否符合预期。
fine_script目录下提供有脚本:finetuning_onboard.sh,供用户在docker内执行,体验微调功能。
示例1:在REX1032服务器32卡上,另开会话窗口3,进入之前创建的docker容器,执行微调:
sudo docker exec -it xla /bin/bash export PATH="/opt/miniconda/bin:$PATH" source activate tx8_xla_llama3 cd $HOME_PATH/xla_1.3.0/fine_script bash finetuning_onboard.sh --dataset-path $HOME_PATH/xla_modeldata/dataset/total_trainset_new.txt --model-path $HOME_PATH/xla_modeldata/Meta-Llama-3-8B-Instruct/
在正式开始微调前,需要等待加载、编译完成,这一过程较为耗时,32卡需要等待2h左右。正常微调后会打印类似如下log:
微调结束后会有如下log:
示例2:在REX1032服务器32卡上
假设某次微调完成,其工作目录为:
$HOME_PATH/xla_1.3.0/fine_script/32cards_32b_1024s_p0_fa_True_dp32_tp1/workdir/20250310_105047,另开会话窗口4,进入之前创建的docker容器,进入$HOME_PATH/xla_1.3.0/fine_script目录,创建一个目录用于存放转换后的模型文件,
sudo docker exec -it xla /bin/bash export PATH="/opt/miniconda/bin:$PATH" source activate tx8_xla_llama3 cd $HOME_PATH/xla_1.3.0/fine_script mkdir $HOME_PATH/save_merged_model export BASE_MODEL_DIR="$HOME_PATH/xla_modeldata/Meta-Llama-3-8B-Instruct/" export FINETUNE_MODEL_DIR="$HOME_PATH/xla_1.3.0/fine_script/32cards_32b_1024s_p0_fa_True_dp32_tp1/workdir/20250310_105047/checkpoint/tmp_consolidated.pth" export MERGED_MODEL_DIR="$HOME_PATH/save_merged_model"
执行模型格式转换,生成Hugging Face模型格式文件在MERGED_MODEL_DIR环境变量指定的目录下,可供推理直接使用:
python convert_llama_to_hf.py
示例3:在REX1032服务器32卡上假设某次微调中断,其工作目录为:
$HOME_PATH/xla_1.3.0/fine_script/32cards_32b_1024s_p0_fa_True_dp32_tp1/workdir/20250310_105047
另开会话窗口5,进入之前创建的docker容器,执行微调:
sudo docker exec -it xla /bin/bash export PATH="/opt/miniconda/bin:$PATH" source activate tx8_xla_llama3 cd $HOME_PATH/xla_1.3.0/fine_script sh finetuning_onboard.sh --skip-compile --work-dir $HOME_PATH/xla_1.3.0/fine_script/32cards_32b_1024s_p0_fa_True_dp32_tp1/workdir/20250310_105047 -dataset-path $HOME_PATH/xla_modeldata/dataset/total_trainset_new.txt --model-path $HOME_PATH/xla_modeldata/Meta-Llama-3-8B-Instruct/
正常断点续训后会打印关键字:resume_from,断点续训结束后会有如下log(和正常微调后一样):
示例4:分别登录两个服务器,分别打开两个会话窗口,准备执行微调脚本:
在主机(master)上执行:
sudo docker exec -it xla /bin/bash export PATH="/opt/miniconda/bin:$PATH" source activate tx8_xla_llama3 cd $HOME_PATH/xla_1.3.0/two_node_script bash finetuning_onboard.sh --master_ip $MASTER_IP --pjrt_group_rank 1 --dataset_path $HOME_PATH /xla_modeldata/dataset/total_trainset_new.txt --model_path $HOME_PATH /xla_modeldata/Meta-Llama-3-8B-Instruct
在从机(slave)上执行:
sudo docker exec -it xla /bin/bash export PATH="/opt/miniconda/bin:$PATH" source activate tx8_xla_llama3 cd $HOME_PATH/xla_1.3.0/two_node_script bash finetuning_onboard.sh --master_ip $MASTER_IP --pjrt_group_rank 2 --dataset_path $HOME_PATH /xla_modeldata/dataset/total_trainset_new.txt --model_path $HOME_PATH/xla_modeldata/Meta-Llama-3-8B-Instruct
在正式开始微调前,需要等待加载、编译完成,这一过程较为耗时,32卡需要等待2h左右。
正常微调后会打印类似如下log:
微调结束后会有如下log:
finetuning_onboard.sh脚本内会调用真正执行微调的python脚本,该python脚本支持参数修改。被调用的.py脚本参数如下,用户可根据需要修改参数后执行。
参数名称 | 必需/可选 | 参数类型 | 默认值 | 说明 |
--model_name_or_path | 可选 | string | None | 指定模型文件路径 |
--dataset_name | 可选 | string | None | 指定数据集文件 |
--skip_padding_data | 可选 | bool | None | Golden_gpu脚本运行的response回答文件路径,用作相似度对比。 |
--num_train_epochs | 可选 | int | 1 | 指定训练的epoch数值。 |
--per_device_train_batch_size | 可选 | int | 1 | 指定每个device的batchsize,当前只支持1 |
--do_train | 可选 | bool | None | 指定保存checkpoint的路径 |
--output_dir | 可选 | string | 0,1,2,3 | 当前脚本运行所选用的卡数(..表示区间)。 支持以下场景配置: 1. 单卡单batch场景,配置0; 2. 四卡单batch场景,有以下8种配置组合:0..3/4..7/8..11/…/28..31。 N batch场景:上述8种配置组合可以同时任选N组,N最大为8。 |
--overwrite_output_dir | 可选 | bool | False | 指定当前脚本需要运行的batch数 ,最大支持8。 注: 1. 需要和traversal-flag参数搭配使用; 2. 支持列表输入,eg:-bs [1,5,6]; 3. 与--card-num参数同时使用时,以batch-size为准。 |
--cache_dir | 可选 | string | None | 指定中间缓存路径,下载数据集或者模型临时存放路径。 |
--block_size | 可选 | int | None | 指定模型的sequence length长度值;必须设置(如128) |
--torch_dtype | 可选 | string | None | 设置模型、数据的数据类型,支持auto,bfloat16,float16,float32,auto为继承模型权重数据类型 |
--dataloader_drop_last | 可选 | string | False | 设置最后一轮数据在不够的情况下是否需要丢掉 |
--learning_rate | 可选 | double | 5e-5 | 设置学习率 |
--save_strategy | 可选 | string | steps | 设置保存checkpoint策略;可选值:no、steps、epoch;对应不保存或者按steps保存或者按epoch保存 |
--optim | 可选 | string | adamw_torch | 设置优化器,当前支持adamw_torch,adamw_torch_tx8_fuse |
--weight_decay | 可选 | double | 0 | 设置weight_decay参数值 |
--adam_beta2 | 可选 | double | 0.999 | 设置adam_beta2参数值 |
--lr_scheduler_type | 可选 | string | Linear | 设置lr_scheduler_type参数值 |
--warmup_ratio | 可选 | double | 0.0 | 设置warmup_ratio参数值 |
--spmd_dcn_parallelism | 可选 | int | 1 | 设置数据并行,只支持设置为1,暂不支持其他值 |
--spmd_2d_sharding | 可选 | int | 0 | 设置2D sharding,只支持设置为0,1,暂不支持其他值 |
--remove_unused_columns | 可选 | bool | True | 删除数据集中模型训练用不到的列 |
--optim_init | 可选 | bool | False | 初始化优化器,默认不开启 |
--peft_lora | 可选 | bool | False | 指定是否做LoRA训练,设置后做LoRA,不设置做全量训练 |
--fsdp_dp_sharding | 可选 | Int | 1 | 数据并行数 |
--megatrion_tp_sharding | 可选 | Int | 1 | 张量并行数 |
--fsdp | 可选 | str | None | 并行切分模式,仅支持full_shared |
--fsdp_config | 可选 | str | None | 并行配置文件,固定 路径./fsdp_xla_config.json |
--use_flash_attn | 可选 | Bool | False | 是否启动flash attension |
2025/4/1 第一版
2025/4/8 升级版本到1.3.0