Treine, ajuste e implante o Qwen (7B/14B/72B) na plataforma Lingjun Intelligent Computing com Megatron. Este guia utiliza o Qwen-7B como exemplo.
Pré-requisitos
Este guia utiliza o Qwen-7B v1.1.4. Conclua as seguintes preparações:
Ative o PAI (DSW, DLC e EAS) e crie um workspace padrão. Activate PAI and create a default workspace.
-
Adquira recursos Lingjun e crie uma cota de recursos. Selecione as especificações de acordo com o tamanho do seu modelo. Preços: Lingjun Serverless pricing details. Configuração: Create a resource group and purchase Lingjun resources e Create a resource quota.
Tamanho do modelo
Recursos para treinamento de parâmetros completos
Recursos de inferência (mínimo)
Segmento de Modelo de Treinamento Megatron
7B
8 × GPUs gu7xf, 8 × GPUs gu7ef
1 × V100 (32 GB VRAM), 1 × A10 (24 GB VRAM)
TP: 1, PP: 1
14B
8 × GPUs gu7xf, 8 × GPUs gu7ef
2 × V100 (32 GB VRAM), 2 × A10 (24 GB VRAM)
TP: 2, PP: 1
72B
4 × 8 GPUs gu7xf, 4 × 8 GPUs gu7ef
6 × V100 (32 GB VRAM), 2 × GPUs gu7xf
TP: 8, PP: 2
Crie um conjunto de dados de sistema de arquivos NAS de uso geral para armazenar arquivos e resultados de treinamento. Configure o caminho de montagem padrão como
/mnt/data/nas. Create and manage datasets.-
Crie uma instância DSW com as seguintes configurações. Create a DSW instance.
Resource Quota: Selecione a cota de recursos criada para os recursos Lingjun.
-
Instance Type: Configure as seguintes especificações de recursos.
vCPUs: 90.
Memory (GiB): 1024.
Shared Memory (GiB): 1024.
GPUs: Pelo menos 8.
Dataset Mounting: Clique em Custom Dataset, selecione o conjunto de dados criado e utilize o caminho de montagem padrão.
Image Configuration: Na aba Image Address, defina a imagem de runtime como
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llm.
Caso utilize um usuário RAM, conceda as permissões necessárias para DSW, DLC ou EAS. Cloud product dependencies and permissions: DSW, Cloud product dependencies and permissions: DLC ou Cloud product dependencies and permissions: EAS.
Limites
Esta melhor prática está disponível apenas na região China (Ulanqab).
Etapa 1: Preparar o modelo Qwen
Baixe o modelo Qwen utilizando um dos métodos a seguir:
-
Acesse o ambiente de desenvolvimento PAI DSW.
Faça login no PAI console.
No canto superior esquerdo da página, selecione a região onde deseja utilizar o serviço: China (Ulanqab).
No painel de navegação à esquerda, clique em Workspaces. Na página exibida, clique no nome do workspace que deseja gerenciar.
No painel de navegação à esquerda, escolha .
Na coluna Actions da instância alvo, clique em Open.
Na barra de menu superior, clique em Terminal. Na aba exibida, clique em create a terminal.
-
Baixe o modelo Qwen.
Baixar o modelo da comunidade ModelScope
No Terminal, execute o comando a seguir para instalar o ModelScope.
Insira no ambiente Python.
O código a seguir baixa os arquivos do modelo Qwen-7B.
Pressione
Ctrl+Dpara sair do ambiente Python.Execute o comando a seguir para mover o modelo Qwen baixado para a pasta correspondente.
pip install modelscopepython# ### Loading Model and Tokenizer from modelscope.hub.snapshot_download import snapshot_download model_dir = snapshot_download('qwen/Qwen-7B', 'v1.1.4') # model_dir = snapshot_download('qwen/Qwen-14B', 'v1.0.4') # model_dir = snapshot_download('qwen/Qwen-72B') # Get the download path. print(model_dir) # /root/.cache/modelscope/hub/qwen/Qwen-7B# mkdir -p /mnt/workspace/qwen-ckpts/${ckpt_folder_with_hf_suffix} mkdir -p /mnt/workspace/qwen-ckpts/qwen-7b-hf # cp -r ${path_to_downloaded_model}/* /mnt/workspace/qwen-ckpts/${ckpt_folder_with_hf_suffix} cp -r /root/.cache/modelscope/hub/qwen/Qwen-7B/* /mnt/workspace/qwen-ckpts/qwen-7b-hfBaixar o modelo da comunidade HuggingFace
No Terminal do DSW, execute o comando a seguir para baixar os arquivos do modelo. Este guia usa o modelo Qwen-7B como exemplo. Para baixar os arquivos dos modelos Qwen-14B ou Qwen-72B, modifique o código abaixo conforme necessário.
mkdir /mnt/workspace/qwen-ckpts cd /mnt/workspace/qwen-ckpts git clone https://huggingface.co/Qwen/Qwen-7B # git clone https://huggingface.co/Qwen/Qwen-7B-Chat # git clone https://huggingface.co/Qwen/Qwen-14B # git clone https://huggingface.co/Qwen/Qwen-14B-Chat # git clone https://huggingface.co/Qwen/Qwen-72B # git clone https://huggingface.co/Qwen/Qwen-72B-Chat
Etapa 2: Preparar dados de pré-treinamento
Prepare os dados de pré-treinamento no DSW. Este exemplo utiliza o WuDaoCorpora2.0 (apenas para pesquisa) para demonstrar o pré-processamento de dados com Megatron. Baixe os dados de amostra fornecidos pelo PAI ou prepare seus próprios dados.
Utilizar dados de amostra em pequena escala processados pelo PAI
O PAI fornece dados de amostra processados. Execute o comando a seguir para baixá-los.
mkdir /mnt/workspace/qwen-datasets/
cd /mnt/workspace/qwen-datasets
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-train.json
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/alpaca_zh-qwen-valid.json
mkdir -p /mnt/workspace/qwen-datasets/wudao
cd /mnt/workspace/qwen-datasets/wudao
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_content_document.bin
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-datasets/wudao_qwenbpe_content_document.idx
Processar os dados manualmente
-
Baixe o conjunto de dados WuDaoCorpora2.0 para
/mnt/workspace/qwen-datasets. A pasta descompactada chama-se wudao_200g.O PAI fornece dados de amostra para demonstração. Execute o comando a seguir para baixar e descompactar o conjunto de dados.
mkdir /mnt/workspace/qwen-datasets cd /mnt/workspace/qwen-datasets wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/datasets/WuDaoCorpus2.0_base_sample.tgz tar zxvf WuDaoCorpus2.0_base_sample.tgz mv WuDaoCorpus2.0_base_sample wudao_200g -
No Terminal, execute o comando a seguir para limpar e converter o formato dos dados Wudao. Isso gera um arquivo unificado merged_wudao_cleaned.json.
#! /bin/bash set -ex # Set the path where the raw data is stored. data_dir=/mnt/workspace/qwen-datasets/wudao_200g # Start the data cleansing process. dataset_dir=$(dirname $data_dir) mkdir -p ${dataset_dir}/cleaned_wudao_dataset cd ${dataset_dir}/cleaned_wudao_dataset wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/llama2-codes/preprocess_wudao2.py # Unlike the previous section, the key parameter is added and set to text. python preprocess_wudao2.py -i ${data_dir} -o ${dataset_dir}/cleaned_wudao_dataset -k text -p 32 # Merge the cleansed data. mkdir ${dataset_dir}/wudao cd ${dataset_dir}/wudao find ${dataset_dir}/cleaned_wudao_dataset -name "*.json" -exec cat {} + > ${dataset_dir}/wudao/merged_wudao_cleaned.json rm -rf ${dataset_dir}/cleaned_wudao_datasetApós a execução do comando, a estrutura de arquivos do diretório
qwen-datasetsserá a seguinte. Uma nova pasta wudao é adicionada.qwen-datasets ├── wudao_200g └── wudao └── merged_wudao_cleaned.json -
No Terminal, execute o comando a seguir para dividir o arquivo merged_wudao_cleaned.json em vários grupos e compactá-los. Isso facilita o processamento multithread nas etapas subsequentes.
apt-get update apt-get install zstd # The number of chunks is set to 10. increase this value if data processing is slow. NUM_PIECE=10 # Process the merged_wudao_cleaned.json file. mkdir -p ${dataset_dir}/cleaned_zst/ # Query the total data length and split the data. NUM=$(sed -n '$=' ${dataset_dir}/wudao/merged_wudao_cleaned.json) echo "total line of dataset is $NUM, data will be split into $NUM_PIECE pieces for processing" NUM=`expr $NUM / $NUM_PIECE` echo "each group is processing $NUM sample" split_dir=${dataset_dir}/split mkdir $split_dir split -l $NUM --numeric-suffixes --additional-suffix=.jsonl ${dataset_dir}/wudao/merged_wudao_cleaned.json $split_dir/ # Compress the data. o_path=${dataset_dir}/cleaned_zst/ mkdir -p $o_path files=$(ls $split_dir/*.jsonl) for filename in $files do f=$(basename $filename) zstd -z $filename -o $o_path/$f.zst & done rm -rf $split_dir rm ${dataset_dir}/wudao/merged_wudao_cleaned.jsonApós a execução do comando, a estrutura de arquivos do diretório
qwen-datasetsserá a seguinte. Uma nova pastacleaned_zsté adicionada, contendo 10 arquivos compactados.qwen-datasets ├── wudao_200g ├── wudao └── cleaned_zst ├── 00.jsonl.zst │ ... └── 09.jsonl.zst -
Crie um conjunto de dados de pré-treinamento no formato MMAP.
MMAP é um formato de dados pré-tokenizados que reduz o tempo de espera para leitura de dados durante o treinamento e ajuste fino. Isso é especialmente vantajoso ao processar dados em grande escala. Siga estas etapas:
-
No Terminal do DSW, execute o comando a seguir para copiar o código-fonte do PAI-Megatron-Patch, ferramenta de treinamento de modelos para Megatron, para o diretório de trabalho do DSW
/mnt/workspace/.cd /mnt/workspace/ # Method 1: Obtain the training code from the open source website. git clone --recurse-submodules https://github.com/alibaba/Pai-Megatron-Patch.git # Method 2: Obtain the training code using wget. run tar zxvf Pai-Megatron-Patch.tgz to decompress the file. wget https://atp-modelzoo.oss-cn-hangzhou.aliyuncs.com/release/models/Pai-Megatron-Patch.tgz -
No Terminal, execute o comando a seguir para converter os dados para o formato MMAP.
Após a execução do comando, os arquivos
.bine.idxsão gerados no diretório/mnt/workspace/qwen-datasets/wudao.# Install the tokenizer library required by Qwen. pip install tiktoken # Set the dataset path and working directory. export dataset_dir=/mnt/workspace/qwen-datasets export WORK_DIR=/mnt/workspace # Generate MMAP-format pre-training datasets for the training and validation sets. cd ${WORK_DIR}/Pai-Megatron-Patch/toolkits/pretrain_data_preprocessing bash run_make_pretraining_dataset.sh \ ../../Megatron-LM-23.04 \ ${WORK_DIR}/Pai-Megatron-Patch/ \ ${dataset_dir}/cleaned_zst/ \ qwenbpe \ ${dataset_dir}/wudao/ \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf rm -rf ${dataset_dir}/cleaned_zstA tabela a seguir descreve os parâmetros do script run_make_pretraining_dataset.sh.
Parâmetro
Descrição
MEGATRON_PATH=$1
Caminho do código-fonte aberto do Megatron.
MEGATRON_PATCH_PATH=$2
Caminho do código Megatron Patch.
input_data_dir=$3
Caminho da pasta que contém o conjunto de dados WuDao empacotado.
tokenizer=$4
Tipo de tokenizador. Defina como qwenbpe.
output_data_dir=$5
Caminho para salvar os arquivos de saída
.bine.idx.load_dir=$6
Caminho do arquivo tokenizer_config.json gerado.
Estrutura resultante do diretório
qwen-datasets:qwen-datasets ├── wudao_200g └── wudao ├── wudao_qwenbpe_content_document.bin └── wudao_qwenbpe_content_document.idx
-
Etapa 3: Treinar o modelo com Megatron
Treine o modelo com Megatron.
Converter o formato do modelo
Converta os arquivos do modelo HuggingFace para o formato Megatron.
Baixar o modelo Megatron convertido
O PAI fornece um modelo pré-convertido. Baixe-o:
cd /mnt/workspace/
mkdir qwen-ckpts
cd qwen-ckpts
wget https://atp-modelzoo-wlcb-pai.oss-cn-wulanchabu.aliyuncs.com/release/models/pai-megatron-patch/qwen-ckpts/qwen-7b-hf-to-mg-tp1-pp1.tgz
tar -zxf qwen-7b-hf-to-mg-tp1-pp1.tgz
mv qwen-7b-hf-to-mg-tp1-pp1 qwen-7b-hf-to-megatron-tp1-pp1
Converter o modelo HuggingFace para o formato Megatron
Execute o comando a seguir para converter o modelo HuggingFace para o formato Megatron:
# Convert the model.
cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen
sh model_convertor.sh \
../../../Megatron-LM-main \
/mnt/workspace/qwen-ckpts/qwen-7b-hf \
/mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \
1 \
1 \
qwen-7b \
0 \
false
A tabela a seguir descreve os parâmetros do script model_convertor.sh.
Parâmetro | Descrição |
MEGATRON_PATH=$1 | Caminho do código-fonte aberto do Megatron. |
SOURCE_CKPT_PATH=$2 | Caminho dos arquivos do modelo HuggingFace. |
TARGET_CKPT_PATH=$3 | Caminho para salvar o modelo Megatron convertido. |
TP=$4 | Número de shards de paralelismo de tensor. Deve ser igual ao número usado no treinamento. O número de shards varia conforme o tamanho do modelo. Modifique este parâmetro conforme necessário ao converter o modelo:
|
PP=$5 | Número de shards de paralelismo de pipeline. Deve ser igual ao número usado no treinamento. O número de shards varia conforme o tamanho do modelo. Modifique este parâmetro conforme necessário ao converter o modelo:
|
MN=$6 | Nome do modelo: qwen-7b, qwen-14b ou qwen-72b. |
EXTRA_VOCAB_SIZE=$7 | Tamanho extra do vocabulário. |
mg2hf=$8 | Especifica se deve converter um modelo Megatron para um modelo HuggingFace. |
Modelo pré-treinado
Realize o pré-treinamento em uma única instância DSW ou envie uma tarefa distribuída no DLC. O treinamento leva cerca de duas horas. Os arquivos do modelo são salvos no diretório /mnt/workspace/output_megatron_qwen/.
Modelo pré-treinado standalone no DSW
Execute o comando a seguir para o modelo Qwen-7B no Terminal:
export WORK_DIR=/mnt/workspace
cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen
sh run_pretrain_megatron_qwen.sh \
dsw \
${WORK_DIR}/Pai-Megatron-Patch \
7B \
1 \
8 \
1e-5 \
1e-6 \
2048 \
2048 \
85 \
fp16 \
1 \
1 \
sel \
true \
false \
false \
false \
100000 \
${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document \
${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \
100000000 \
10000 \
${WORK_DIR}/output_megatron_qwen/
Parâmetros do script run_pretrain_megatron_qwen.sh:
Parâmetro | Descrição |
ENV=$1 | Ambiente de execução:
|
MEGATRON_PATH=$2 | Caminho do código-fonte aberto do Megatron. |
MODEL_SIZE=$3 | Tamanho do modelo: 7B, 14B ou 72B. |
BATCH_SIZE=$4 | Número de amostras para uma iteração de treinamento em cada GPU: 4 ou 8. |
GLOBAL_BATCH_SIZE=$5 | Número total de amostras de treinamento. |
LR=$6 | Taxa de aprendizado: 1e-5 ou 5e-5. |
MIN_LR=$7 | Taxa mínima de aprendizado: 1e-6 ou 5e-6. |
SEQ_LEN=$8 | Comprimento da sequência. |
PAD_LEN=${9} | Comprimento do preenchimento. |
EXTRA_VOCAB_SIZE=${10} | Tamanho extra do vocabulário:
|
PR=${11} | Precisão do treinamento: fp16 ou bf16. |
TP=${12} | Grau de paralelismo do modelo. |
PP=${13} | Grau de paralelismo de pipeline. |
AC=${14} | Modo de checkpoint de ativação:
|
DO=${15} | Especifica se deve usar a versão Megatron do otimizador Zero-1 para reduzir o uso de VRAM:
|
FL=${16} | Especifica se deve ativar o Flash Attention:
|
SP=${17} | Especifica se deve usar paralelismo de sequência:
|
TE=${18} | Especifica se deve ativar a aceleração Transformer-engine. Este recurso requer GPUs gu8xf. |
SAVE_INTERVAL=${19} | Intervalo para salvar arquivos de checkpoint. |
DATASET_PATH=${20} | Caminho do conjunto de dados de treinamento. |
PRETRAIN_CHECKPOINT_PATH=${21} | Caminho do modelo pré-treinado. |
TRAIN_TOKENS=${22} | Tokens de treinamento. |
WARMUP_TOKENS=${23} | Número de tokens de warmup. |
OUTPUT_BASEPATH=${24} | Caminho para salvar os arquivos do modelo de saída. |
Modelo Pré-treinado Distribuído no DLC
Após a depuração em instância única, configure uma tarefa distribuída multi-GPU no DLC:
-
Acesse a página Create Job.
Faça login no PAI console, selecione a região e o workspace alvo e clique em Deep Learning Containers (DLC).
Na página Deep Learning Containers (DLC), clique em Create Job.
-
Na página Create Job, configure os seguintes parâmetros principais e mantenha os padrões para os demais. Create a training task.
Parâmetro
Descrição
Basic Information
Job Name
Insira um nome personalizado para a tarefa. Este guia utiliza test_qwen_dlc.
Environment Information
Image Configuration
Selecione Image Address e insira
pai-image-manage-registry.cn-wulanchabu.cr.aliyuncs.com/pai/pytorch-training:1.12-ubuntu20.04-py3.10-cuda11.3-megatron-patch-llmna caixa de texto.Mount dataset
Clique em Custom Dataset e configure os seguintes parâmetros:
Custom Dataset: Selecione o conjunto de dados NAS criado.
Mount Path: Defina como
/mnt/workspace/.
Startup Command
Configure o seguinte comando. Os parâmetros iniciais do script run_pretrain_megatron_qwen.sh são os mesmos usados para pré-treinar o modelo em uma única instância DSW.
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen sh run_pretrain_megatron_qwen.sh \ dlc \ ${WORK_DIR}/PAI-Megatron-Patch \ 7B \ 1 \ 8 \ 1e-5 \ 1e-6 \ 2048 \ 2048 \ 85 \ fp16 \ 1 \ 1 \ sel \ true \ false \ false \ false \ 100000 \ ${WORK_DIR}/qwen-datasets/wudao/wudao_qwenbpe_content_document \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \ 100000000 \ 10000 \ ${WORK_DIR}/output_megatron_qwen/Resource Information
Resource Type
Selecione Lingjun Intelligent Computing.
Source
Selecione Resource Type.
Resource Type
Selecione a cota de recursos criada para recursos Lingjun.
Framework
Selecione PyTorch.
Job Resource
Configure os seguintes parâmetros para o nó Worker:
Nodes: 2. Para realizar treinamento multi-nó, defina Nodes com o número necessário de máquinas.
GPUs: 8
vCPUs: 90
NotaO número de núcleos de CPU não pode exceder 96.
Memory (GiB): 1024
Shared Memory (GiB): 1024
Clique em OK. A página redireciona automaticamente para Deep Learning Containers (DLC). Quando o Status mudar para Succeeded, a tarefa de treinamento foi concluída com sucesso.
Ajustar o modelo com aprendizado supervisionado
Ajuste o modelo em uma única instância DSW ou envie uma tarefa distribuída no ambiente DLC. O treinamento leva cerca de duas horas. Os arquivos do modelo são salvos em /mnt/workspace/output_megatron_qwen/.
Antes do ajuste fino, acesse Step 2: Prepare pre-training data e baixe o arquivo JSON na aba Utilizar dados de amostra em pequena escala processados pelo PAI.
-
Ajuste o modelo.
Ajustar o modelo em uma única instância DSW
Execute o comando a seguir para o modelo Qwen-7B no Terminal:
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen sh run_finetune_megatron_qwen_withGA.sh \ dsw \ ${WORK_DIR}/Pai-Megatron-Patch \ 7B \ 1 \ 96 \ 1e-5 \ 1e-6 \ 2048 \ 2048 \ 85 \ bf16 \ 1 \ 1 \ sel \ true \ false \ false \ false \ 1000 \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-train.json \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-valid.json \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \ 2000 \ 10 \ ${WORK_DIR}/output_megatron_qwen/Parâmetros do script run_finetune_megatron_qwen_withGA.sh:
Parâmetro
Descrição
ENV=$1
Ambiente de execução:
dlc
dsw
MEGATRON_PATH=$2
Caminho do código-fonte aberto do Megatron.
MODEL_SIZE=$3
Tamanho do modelo: 7B, 14B ou 72B.
BATCH_SIZE=$4
Número de amostras para uma iteração de treinamento em cada GPU: 1, 2, 4 ou 8.
GLOBAL_BATCH_SIZE=$5
Número total de amostras para uma iteração de ajuste fino: 64, 96 ou 128.
LR=$6
Taxa de aprendizado: 1e-5 ou 5e-5.
MIN_LR=$7
Taxa mínima de aprendizado: 1e-6 ou 5e-6.
SEQ_LEN=$8
Comprimento da sequência.
PAD_LEN=$9
Comprimento da sequência de preenchimento.
EXTRA_VOCAB_SIZE=${10}
Tamanho extra do vocabulário:
Qwen-7B: 85.
Qwen-14B: 213.
Qwen-72B: 213.
PR=${11}
Precisão do treinamento: fp16 ou bf16.
TP=${12}
Grau de paralelismo do modelo.
PP=${13}
Grau de paralelismo de pipeline.
AC=${14}
Modo de checkpoint de ativação: full ou sel.
DO=${15}
Especifica se deve usar a versão Megatron do otimizador Zero-1 para reduzir o uso de VRAM:
true
false
FL=${16}
Especifica se deve ativar o Flash Attention:
true
false
SP=${17}
Especifica se deve usar paralelismo de sequência:
true
false
TE=${18}
Especifica se deve ativar a aceleração Transformer-engine. Este recurso requer GPUs gu8xf.
SAVE_INTERVAL=${19}
Intervalo de passos para salvar o modelo.
DATASET_PATH=${20}
Caminho do conjunto de dados de treinamento.
VALID_DATASET_PATH=${21}
Caminho do conjunto de validação.
PRETRAIN_CHECKPOINT_PATH=${22}
Caminho do modelo pré-treinado.
TRAIN_ITERS=${23}
Número de iterações de treinamento.
LR_WARMUP_ITERS=${24}
Passo no qual a taxa de aprendizado aumenta mais.
OUTPUT_BASEPATH=${25}
Caminho para salvar os arquivos do modelo de saída.
Ajustar o modelo com treinamento distribuído no DLC
Após a depuração em uma única instância DSW, configure uma tarefa distribuída com servidores multi-GPU no ambiente DLC. Ao enviar a tarefa de treinamento do DLC, configure o Startup Command conforme abaixo. Os demais parâmetros são os mesmos descritos em Step 2: Pre-train the model.
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen sh run_finetune_megatron_qwen_withGA.sh \ dlc \ ${WORK_DIR}/Pai-Megatron-Patch \ 7B \ 1 \ 96 \ 1e-5 \ 1e-6 \ 2048 \ 2048 \ 85 \ bf16 \ 1 \ 1 \ sel \ true \ false \ false \ false \ 1000 \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-train.json \ ${WORK_DIR}/qwen-datasets/alpaca_zh-qwen-valid.json \ ${WORK_DIR}/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 \ 2000 \ 10 \ ${WORK_DIR}/output_megatron_qwen/Os parâmetros do script run_finetune_megatron_qwen_withGA.sh são os mesmos utilizados para ajuste fino em uma única instância DSW.
Etapa 4: Realizar inferência offline
Após o treinamento, utilize o pipeline de inferência do Megatron para inferência offline e avaliação do modelo.
-
Baixe a amostra de teste pred_input.jsonl e faça upload para o diretório
/mnt/workspaceno DSW. Upload and download files.NotaA estrutura dos dados para inferência deve corresponder à estrutura usada no ajuste fino.
-
Copie todos os arquivos JSON e tokenizer.model do caminho do modelo de pré-treinamento para o caminho do modelo gerado. O caminho do modelo gerado é o subdiretório dentro de
{OUTPUT_BASEPATH }/checkpointe está no mesmo nível de latest_checkpointed_iteration.txt.NotaSubstitua os caminhos no comando pelos seus caminhos reais.
cd /mnt/workspace/qwen-ckpts/qwen-7b-hf-to-megatron-tp1-pp1 cp *.json /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX/ cp tokenizer.model /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX/ -
No Terminal, execute o comando a seguir para realizar a inferência offline. Os resultados da inferência são salvos no arquivo
/mnt/workspace/qwen_pred.txt. Avalie o desempenho do modelo com base nos resultados.NotaAntes de executar o comando, defina o parâmetro CUDA_VISIBLE_DEVICES como 0 e o parâmetro GPUS_PER_NODE como 1 no script run_text_generation_megatron_qwen.sh.
export WORK_DIR=/mnt/workspace cd ${WORK_DIR}/Pai-Megatron-Patch/examples/qwen bash run_text_generation_megatron_qwen.sh \ dsw \ ${WORK_DIR}/PAI-Megatron-Patch \ /mnt/workspace/output_megatron_qwen/checkpoint/dswXXX \ 7B \ 1 \ 1 \ 1024 \ 1024 \ 85 \ fp16 \ 10 \ 512 \ 512 \ ${WORK_DIR}/pred_input.jsonl \ ${WORK_DIR}/qwen_pred.txt \ 0 \ 1.0 \ 1.2A tabela a seguir descreve os parâmetros do script run_text_generation_megatron_qwen.sh.
Parâmetro
Descrição
ENV=$1
Ambiente de execução:
dlc
dsw
MEGATRON_PATCH_PATH=$2
Caminho do código Megatron Patch.
CHECKPOINT_PATH=$3
Caminho onde o modelo foi salvo durante a fase de treinamento.
ImportanteSubstitua pelo caminho do seu modelo.
MODEL_SIZE=$4
Tamanho do modelo: 7B, 14B ou 72B.
TP=$5
Grau de paralelismo do modelo.
ImportanteSe definido como 1, usa uma única GPU para inferência.
Se definido como maior que 1, usa o número correspondente de GPUs para inferência.
BS=$6
Número de amostras para uma iteração de inferência em cada GPU: 1, 4 ou 8.
SEQ_LEN=$7
Comprimento da sequência: 256, 512 ou 1024.
PAD_LEN=$8
Comprimento PAD: O comprimento até o qual o texto é preenchido.
EXTRA_VOCAB_SIZE=${9}
Número de tokens adicionados durante a conversão do modelo:
Qwen-7B: 85.
Qwen-14B: 213.
Qwen-72B: 213.
PR=${10}
Precisão usada para inferência: fp16 ou bf16.
TOP_K=${11}
Número de tokens de vocabulário com maior probabilidade a manter para filtragem top-k (0 a n): 0, 5, 10 ou 20.
INPUT_SEQ_LEN=${12}
Comprimento da sequência de entrada: 512.
OUTPUT_SEQ_LEN=${13}
Comprimento da sequência de saída: 256.
INPUT_FILE=${14}
Arquivo de texto para inferência: pred_input.jsonl. Cada linha é uma amostra.
OUTPUT_FILE=${15}
Arquivo de saída para inferência: qwen_pred.txt.
TOP_P=${16}
Probabilidade cumulativa para filtragem top-p (0 a 1): 0, 0.85 ou 0.95.
NotaApenas um entre TOP_K e TOP_P pode ser diferente de zero.
TEMPERATURE=${17}
Penalidade de temperatura na política de amostragem: 1–n.
REPETITION_PENALTY=${18}
Penalidade por repetição. O valor pode variar de 1 a 2. O valor padrão é 1.2.
Etapa 5: Converter o formato do modelo
Converta o modelo Megatron treinado para o formato HuggingFace para implantação online.
-
Execute o comando a seguir para converter o modelo Megatron para o formato HuggingFace.
export WORK_DIR=/mnt/workspace cd /mnt/workspace/Pai-Megatron-Patch/toolkits/model_checkpoints_convertor/qwen sh model_convertor.sh \ ../../../Megatron-LM-main \ ${WORK_DIR}/output_megatron_qwen/checkpoint/${path}/iter_******* \ /mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1/ \ 1 \ 1 \ qwen-7b \ 0 \ trueA tabela a seguir descreve os parâmetros do script model_convertor.sh.
Parâmetro
Descrição
MEGATRON_PATH=$1
Caminho do código-fonte aberto do Megatron.
SOURCE_CKPT_PATH=$2
Caminho do modelo Megatron obtido no treinamento. O caminho deve ser específico para o diretório
iter_. Por exemplo:${WORK_DIR}/output_megatron_qwen/checkpoint/dsw-pretrain-megatron-qwen-7B-lr-1e-5-bs-1-seqlen-2048-pr-bf16-tp-1-pp-1-ac-sel-do-true-sp-false-tt--wt-/iter_**.ImportanteSubstitua pelo caminho do seu modelo.
Se utilizar um modelo pré-treinado para conversão, exclua todos os arquivos distrib_optim.pt do caminho do modelo.
TARGET_CKPT_PATH=$3
Caminho para salvar o modelo HuggingFace convertido.
TP=$4
Número de shards de paralelismo de tensor. Deve ser igual ao número usado no treinamento.
PP=$5
Número de shards de paralelismo de pipeline. Deve ser igual ao número usado no treinamento.
MN=$6
Nome do modelo: qwen-7b, qwen-14b ou qwen-72b.
EXTRA_VOCAB_SIZE=$7
Tamanho extra do vocabulário.
mg2hf=$8
Especifica se deve converter um modelo Megatron para um modelo HuggingFace.
-
Copie os arquivos
.json,.pye.tiktokenda pasta do modelo HuggingFace open source/mnt/workspace/qwen-ckpts/qwen-7b-hfpara o diretório/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1para garantir que o modelo possa ser utilizado.ImportanteNote que não é necessário copiar o arquivo pytorch_model.bin.index.json.
Etapa 6: Implantar e chamar o serviço de modelo
Implante o modelo HuggingFace como um serviço de inferência online.
Implantar o serviço de modelo
Faça login no PAI console. Selecione uma região no topo da página. Em seguida, selecione o workspace desejado e clique em Enter Elastic Algorithm Service (EAS).
Clique em Deploy Service. Na seção Inference Service, clique em Custom Deployment na seção Custom Model Deployment.
-
Na página Custom Deployment, configure os seguintes parâmetros principais e mantenha os padrões para os demais.
Parâmetro
Descrição
Basic Information
Service Name
Insira um nome personalizado para o serviço de modelo, único dentro da região. Este guia utiliza test_qwen.
Environment Information
Deployment Method
Selecione Image-based Deployment e marque Enable Web App.
Image Configuration
Selecione Image Address e insira o seguinte endereço de registro na caixa de texto:
eas-registry-vpc.cn-wulanchabu.cr.aliyuncs.com/pai-eas/chat-llm-webui:3.0.4-vllm.Directly Mount
Selecione NAS como tipo de montagem. Clique em Standard NAS e configure os seguintes parâmetros:
Select File System: Selecione o sistema de arquivos NAS usado para criar o conjunto de dados.
Mount Target: Selecione o destino de montagem usado para criar o conjunto de dados.
File System Path: Defina como o caminho do modelo HuggingFace convertido armazenado no NAS. Este guia utiliza
/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1.Mount Path: Especifique o caminho após a montagem. Este guia utiliza
/qwen-7b.
Command
Defina como
python webui/webui_server.py --port=8000 --model-path=/qwen-7b --tensor-parallel-size 1 --backend=vllm.Onde:
--model-path: Deve ser igual ao caminho de montagem na configuração do modelo.
--tensor-parallel-size: O número de shards de paralelismo de tensor para o modelo. Precisa ser ajustado com base no número de GPUs. Defina como 1 para um modelo 7B e 8 para um modelo 72B (requer uma instância com oito GPUs).
Port Number
Defina como 8000.
Resource Information
Resource Type
Selecione Resource Quota.
Resource Quota
Selecione a cota de recursos criada para recursos Lingjun.
Instance Count
Configure com base no modelo e nos recursos selecionados. Para um modelo 7B, defina Instance Count como 1.
Deployment
Para um modelo 7B, configure os recursos usados por cada instância da seguinte forma:
vCPUs: 16.
Memory (GB): 64.
GPUs: 1.
Service Access
VPC
Após configurar o destino de montagem NAS, o sistema corresponde automaticamente a VPC, vSwitch e grupo de segurança com o sistema de arquivos NAS predefinido.
vSwitch
Security Group Name
-
Clique em Deploy.
Quando o Service Status mudar para Running, o serviço estará implantado.
Chamar o serviço
Chame o serviço implantado para realizar inferência.
Na lista de serviços, clique em no nome do serviço alvo. No canto superior direito da página, clique em View Web App.
Na página WebUI, realize a inferência do modelo.