You need to enable JavaScript to run this app.
文档中心
机器学习平台

机器学习平台

复制全文
下载 pdf
LLM
Llama 3.1 8B mcore dense模型在 MLP 的最佳实践
复制全文
下载 pdf
Llama 3.1 8B mcore dense模型在 MLP 的最佳实践

机器学习平台是一套服务于专业算法工程师,整合云原生的工具+算力(GPU、CPU云服务器),进行一站式AI算法开发和迭代的平台。本方案将为您介绍如何在 MLP 基于 Megatron-Core 进行 Llama3.1 8B mcore dense 模型的预训练/继续预训练、微调和部署。

使用前提

说明

在实践过程中,如果因网络等问题导致模型、数据集或量化工具等无法下载到 TOS bucket ,建议您可以先将其下载到开发机云盘中,再自行拷贝到 TOS 路径下。

本方案以 Meta-Llama-3.1-8B mcore dense 模型为例,在开始执行操作前,请确认您已经完成以下准备工作:

步骤一:准备 Llama-3.1-8B 模型
  1. 进入开发机。

    1. 登陆 账号登录-火山引擎

    2. 在左侧导航栏单击开发机,在开发机列表页面中单击待操作的开发机名称,进入对应开发机内。

    3. 通过 SSH 远程登录开发机,具体操作详见通过SSH远程连接开发机--机器学习平台-火山引擎

  2. 配置 volc configure。具体操作详见使用文档--机器学习平台-火山引擎

  3. 在 Terminal 中执行以下命令,通过镜像源下载 Llama-3.1-8B 模型,并打开挂载的存储桶路径。

cd /vemlp-demo-models
mkdir model-llama-mcore-dense
cd model-llama-mcore-dense
pip3 install -U huggingface_hub
export HF_ENDPOINT=https://hf-mirror.com
huggingface-cli download --token $HF_TOKEN --resume-download meta-llama/Meta-Llama-3.1-8B-Instruct --local-dir $ORIGINAL_MODEL_PATH

其中运行 huggingface-cli 文件,需要传入的参数列表说明如下:

参数描述
hf_token具有llama使用权限的Huggingface账号的hf_token。
original_model_path源safetensor路径。

说明

  1. --token/--hf_username/--hf_token等参数非必须,仅为部分 Repo 有 license 限制,需登录申请许可。如果必要,请在 https://huggingface.co/settings/tokens 获取 token 后进行下载。
  2. 推荐您将模型文件、训练数据集的下载、存放地址都设置在 TOS/VEPFS/SCFS 等共享存储内,之后在进行训练、推理等跨节点的任务时,可以更加轻松地挂载到不同的机器上。
步骤二:准备数据集

在Terminal执行以下命令,可以直接下载火山在镜像中预置的训练与精调数据集。

cd /vemlp-demo-models
mkdir datasets-llama-mcore-dense
cd datasets-llama-mcore-dense
wget https://mlp-opentrail-demo.tos-cn-beijing.volces.com/dataset/oscar-en.tar.gz 
tar -xzvf oscar-en.tar.gz
wget https://mlp-opentrail-demo.tos-cn-beijing.volces.com/dataset/finetune-dataset.tar.gz
tar -xzvf finetune-dataset.tar.gz
步骤三:模型训练

3.1 模型格式转换(safetensor to mcore)

在 Terminal 中执行以下命令,可将 safetensor 无损转换成出支持 megatron 训练的 mcore 格式,并输出到启动参数(MEGATRON_LM_MODEL_PATH)配置的目标 mcore 路径中。格式转换预计耗时 3~4 min。

cd /opt/ml-platform/third_party/vemlp-open-trial/third_party/veMLP-utils/llama_convertor
bash hf2mcore_convertor.sh -s $ORIGINAL_MODEL_PATH -t $MEGATRON_LM_MODEL_PATH -tp 8 -pp 1 -M false -c false -C false -p bf16 -H $ORIGINAL_MODEL_PATH

其中运行 hf2mcore_convertor.sh 脚本需要传入的参数说明如下:

参数描述
original_model_path源safetensor路径。
megatron_lm_model_path目标mcore路径。
tp模型并行度。
pp流水并行度。

M

Megatron 转换为 HuggingFace,取值如下:

  • true

  • false

c

启动 alignment check,取值如下:

  • true

  • false

C

只执行检查而不保存,取值如下:

  • true

  • false

p训练精度:fp16或bf16。
HHuggingFace checkpoint的路径,当M取值为true时给出。

3.2 自定义任务分布式训练(指令微调)

最佳实践文档提供控制台与命令行两种方式的操作说明。

方式一:控制台

  1. 进入自定义任务控制台

  2. 配置环境

    1. 在自定义镜像处配置镜像。
    vemlp-boe-cn-beijing.cr.volces.com/preset-images/megatron-lm:trail-2
    
    1. 填写入口命令并定义环境变量。请注意 TOS 在开发机上挂载的路径与自定义任务中挂载的路径不一致,在入口命令填写数据集路径环境变量中填写模型路径时,需确保为自定义任务中挂载的路径。
    cd /opt/ml-platform/third_party/vemlp-open-trial/third_party/veMLP-examples/llama3-mocre/ &&  /bin/bash run_finetune_mcore_llama3.sh  --batch-size 1 --global-batch-size 32 --lr 1e-5 --min-lr 1e-6 --seq-len 4096 --pad-len 4096 --pr bf16 --tp 8 --pp 1 --cp 1 --sp true --do true --fl true --ac false --optimizer-offload false --save-interval 10000 --dataset-path /data/dataset/oscar-en/oscar-en-llama_text_document  --pretrain-checkpoint-path $CHECKPOINT_PATH --train-tokens 10000000 --warmup-tokens 100 --output-basepath $OUTPUT_PATH --train-iters 10000 --lr-warmup-iters 100
    

  3. 配置资源

    1. 选择合适的资源,最佳实践所用机器为单机 8 卡 ml.pni2l。

    2. 挂载 TOS 和 CFS。需要注意:TOS 在开发机上挂载的路径与自定义任务中挂载的路径不一致,在环境变量中填写模型路径时需确保为自定义任务中挂载的路径。

方式二:命令行

在Terminal中使用以下命令对 Meta-Llama-3.1-8B mcore dense 模型进行微调,具体操作步骤如下。

  1. 创建一个 demo.yaml 文件。

  2. 编辑 yaml 文件,填写镜像、资源规格、环境变量以及入口命令。

  3. 运行任务命令。如运行成果,在Terminal会出现 “创建任务成功,task_id=*****” 字样。完整训练时长预计为2小时左右。

volc ml_task submit --conf=/vemlp-demo-models/demo.yaml

demo.yaml 文件示例:

TaskName:  "llama-8b-mcore-dense"
Description:  ""
Tags: []

ImageUrl:  "vemlp-boe-cn-beijing.cr.volces.com/preset-images/megatron-lm:trail-2"
ResourceQueueID:  "q-**************" #请替换为自己的队列ID
# DL framework, support: TensorFlow PS,PyTorch DDP,Horovod,BytePS
Framework:  "PyTorchDDP"
# Flavor代表机型,去 https://www.volcengine.com/docs/6459/72363 查询
TaskRoleSpecs:
        - RoleName:  "worker"
            RoleReplicas: 1                                                   
            Flavor:  "custom"
            ResourceSpec:
                    Family:  "ml.pni2l"
                    CPU: 105.000
                    Memory: 1875.000
                    GPUNum: 8

Envs:
    - Name:  "CHECKPOINT_PATH"
        Value:  "/data/model-llama-mcore-dense/Meta-Llama-3.1-8B-to-mcore-tp8-pp1/"
    - Name:  "OUTPUT_PATH"
        Value:  "/data/model-llama-mcore-dense/ckpt"
AccessType:  "Queue"
Storages:
        - Type:  "Tos"                     
            MountPath:  "/data"
            Bucket:  "vemlp-demo-models"
            Prefix:  "/"
            FsName:  "testmodel"
            MetaCacheExpiryMinutes:  "-1"
Entrypoint: |
  cd  /opt/ml-platform/third_party/vemlp-open-trial/third_party/veMLP-examples/llama3-mocre/ &&  /bin/bash run_finetune_mcore_llama3.sh  --batch-size 1 --global-batch-size 32 --lr 1e-5 --min-lr 1e-6 --seq-len 4096 --pad-len 4096 --pr  bf16 --tp 8 --pp 1 --cp  1 --sp  true  --do true  --fl  true  --ac  false  --optimizer-offload  false  --save-interval 10000 --dataset-path /data/datasets-llama-mcore-dense/oscar-en/oscar-en-llama_text_document  --pretrain-checkpoint-path  $CHECKPOINT_PATH  --train-tokens 10000000 --warmup-tokens 100 --output-basepath  $OUTPUT_PATH  --train-iters 10000 --lr-warmup-iters 100

其中运行 run_finetune_mcore_llama3.sh 脚本,需要传入的参数列表说明如下:

参数描述
batch_size一次迭代一个数据并行内的样本数。
global_batch_size一次迭代多个数据并行的总样本数。
lr学习率。
min-lr最小学习率。
seq-len序列长度。
pad-lenPadding长度。
pr训练精度:fp16、bf16或fp8。
tp模型并行度。
pp流水并行度。

sp

是否使用序列并行,取值如下:

  • true

  • false

do

是否使用distributed optimizer,取值如下:

  • true

  • false

fl

是否优先使用Flash Attention,取值如下:

  • true

  • false

ac

是否使用Activation checkpointing,取值如下:

  • full

  • sel

  • none

optimizer-offload

是否使用Optimizer offloading,取值如下:

  • true

  • false

save_interval保存checkpoint文件的间隔。
dataset_path训练数据集路径。
pretrain_checkpoint_path预训练模型路径。
train-tokens训练的token数量。
warmup-tokens预热的token数量。
output_path训练输出日志文件路径。
train_iters训练Iter数。
lr_warmup_iters预热Iter数。

3.3 模型格式转换(mcore to safetensor)

在 Terminal 中执行以下命令,可将 mcore 格式无损转换回 safetensor 格式,并输出到启动参数(ORIGINAL_MODEL_PATH)配置的目标路径中。

  1. 首先请确保 $MEGATRON_LM_MODEL_PATH 路径下存在 tokenizer.model 词表文件。如没有,则执行下面的命令行进行文件拷贝。
cp -f /vemlp-demo-models/model-llama-mcore-dense/Meta-Llama-3.1-8B-to-mcore-tp8-pp1/tokenizer.json /vemlp-demo-models/model-llama-mcore-dense/ckpt/checkpoint/finetune-megatron-llama3-8B-tp-8-pp-2/iter_0001000/
  1. 运行 hf2mcore_convertor.sh 脚本,预计转换时间 2 min。
cd /opt/ml-platform/third_party/vemlp-open-trial/third_party/veMLP-utils/llama_convertor
bash hf2mcore_convertor.sh -t /vemlp-demo-models/model-llama-mcore-dense/vllm/ -s vemlp-demo-models/model-llama-mcore-dense/ckpt/checkpoint/finetune-megatron-llama3-8B-tp-8-pp-2/iter_0001000 -tp 8 -pp 1 -M true -c false -C false -p bf16 -H /vemlp-demo-models/model-llama-mcore-dense/ckpt/checkpoint/finetune-megatron-llama3-8B-tp-8-pp-2/iter_0001000
步骤四:部署在线服务进行推理

4.1 复制文件

模型转换为 vllm 推理格式模型后,在 Terminal 执行下面的命令行,将训练前模型路径下的所有json后缀格式文件复制到推理模型文件下路径,和.bin文件同级。

cp -f /vemlp-demo-models/model-llama-mcore-dense/Meta-Llama-3.1-8B-to-mcore-tp8-pp1/*.json /vemlp-demo-models/model-llama-mcore-dense/vllm/

4.2 创建推理服务

  1. 进入在线服务控制台

  2. 创建推理服务并进行资源部署。

    1. 服务网络配置。

      1. 配置私有网络

      2. 打开负载均衡并配置端口。


    2. 在【服务管理】-【部署】处,点击新增部署。

      1. 填写镜像URL。
      vemlp-boe-cn-beijing.cr.volces.com/preset-images/vllm:default
      
      1. 输入入口命令。请注意 TOS 在在线服务上挂载的路径。
      python  -m vllm.entrypoints.openai.api_server  --model /vemlp-demo-models/model-llama-mcore-dense/vllm/  --served-model-name llama3  --tensor-parallel-size 2   --max-num-seqs 64
      
      1. 配置资源。最佳实践使用 2 卡 ml.pni2。

      2. 挂载 TOS 和 CFS。

      3. 配置子网与安全组。




4.3 定义请求文件 request.py 并执行

  1. 创建 request.py 文件。脚本内容示例如下。
import requests
import json

# 定义请求,更换具体的ip地址
url = "http://192.168.0.24:8080/v1/completions"
headers = {
    "Content-Type": "application/json"
}
data = {
    "model": "llama3",
    "prompt": "San Francisco is a",
    "max_tokens": 100,
    "temperature": 0
}

# 发送POST请求
response = requests.post(url, headers=headers, data=json.dumps(data))

# 打印响应内容
print(response.json())
  1. 执行命令请求。
python request.py

结果如下。

{'id': 'cmpl-5e9858992470485583d8b12e6cbe741b', 'object': 'text_completion', 'created': 1726644124, 'model': 'llama3', 'choices': [{'index': 0, 'text': " city of many neighborhoods, each with its own unique character and charm. Whether you're looking for a hipster haven, a family-friendly area, or a quiet retreat, there's a neighborhood for you. Here are some of the best neighborhoods in San Francisco to consider for your next visit.<|im_end|>", 'logprobs': None, 'finish_reason': 'stop', 'stop_reason': None, 'prompt_logprobs': None}], 'usage': {'prompt_tokens': 5, 'total_tokens': 69, 'completion_tokens': 64}}
最近更新时间:2025.07.23 17:22:03
这个页面对您有帮助吗?
有用
有用
无用
无用