Todos os produtos
Search
Central de documentação

Platform For AI:Qwen totalmente gerenciado no Lingjun

Última atualização: Sep 17, 2026

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:

  1. Acesse o ambiente de desenvolvimento PAI DSW.

    1. Faça login no PAI console.

    2. No canto superior esquerdo da página, selecione a região onde deseja utilizar o serviço: China (Ulanqab).

    3. No painel de navegação à esquerda, clique em Workspaces. Na página exibida, clique no nome do workspace que deseja gerenciar.

    4. No painel de navegação à esquerda, escolha Model Training > Data Science Workshop (DSW).

    5. Na coluna Actions da instância alvo, clique em Open.

  2. Na barra de menu superior, clique em Terminal. Na aba exibida, clique em create a terminal.

  3. Baixe o modelo Qwen.

    Baixar o modelo da comunidade ModelScope

    1. No Terminal, execute o comando a seguir para instalar o ModelScope.

    2. pip install modelscope

      Clique para visualizar a saída. Ignore as mensagens WARNING nos resultados.

      Looking in indexes: https://mirrors.cloud.aliyuncs.com/pypi/simple
      Collecting modelscope
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/ac/05/75b5d750608d7354dc3dd023dca7101e5f3b4645cb3e5b816536d472a058/modelscope-1.9.5-py3-none-any.whl (5.4 MB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.4/5.4 MB 104.7 MB/s eta 0:00:00
      Requirement already satisfied: pyyaml in /opt/*/lib/python3.8/site-packages (from modelscope) (5.4.1)
      Requirement already satisfied: pandas in /opt/*/lib/python3.8/site-packages (from modelscope) (1.5.3)
      Requirement already satisfied: addict in /opt/*/lib/python3.8/site-packages (from modelscope) (2.4.0)
      Requirement already satisfied: numpy in /opt/*/lib/python3.8/site-packages (from modelscope) (1.22.2)
      Collecting simplejson>=3.3.0
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/33/5f/b9506e323ea89737b34c97a6eda9d22ad6b771190df93f6eb72657a3b996/simplejson-3.19.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (136 kB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 136.6/136.6 kB 70.2 MB/s eta 0:00:00
      Collecting gast>=0.2.2
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/fa/39/5aae571e5a5f4de9c3445dae08a530498e5c53b0e74410eeeb0991c79047/gast-0.5.4-py3-none-any.whl (19 kB)
      Requirement already satisfied: Pillow>=6.2.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (9.3.0)
      Requirement already satisfied: oss2 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.17.0)
      Requirement already satisfied: filelock>=3.3.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (3.11.0)
      Requirement already satisfied: urllib3>=1.26 in /opt/*/lib/python3.8/site-packages (from modelscope) (1.26.12)
      Requirement already satisfied: datasets<=2.13.0,>=2.8.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.11.0)
      Requirement already satisfied: attrs in /opt/*/lib/python3.8/site-packages (from modelscope) (22.2.0)
      Requirement already satisfied: scipy in /opt/*/lib/python3.8/site-packages (from modelscope) (1.9.3)
      Requirement already satisfied: yapf in /opt/*/lib/python3.8/site-packages (from modelscope) (0.32.0)
      Requirement already satisfied: pyarrow!=9.0.0,>=6.0.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (11.0.0)
      Requirement already satisfied: setuptools in /opt/*/lib/python3.8/site-packages (from modelscope) (65.5.0)
      Requirement already satisfied: requests>=2.25 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.28.1)
      Requirement already satisfied: einops in /opt/*/lib/python3.8/site-packages (from modelscope) (0.6.0)
      Requirement already satisfied: python-dateutil>=2.1 in /opt/*/lib/python3.8/site-packages (from modelscope) (2.8.2)
      Collecting sortedcontainers>=1.5.9
        Downloading https://mirrors.cloud.aliyuncs.com/pypi/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
      Requirement already satisfied: tqdm>=4.64.0 in /opt/*/lib/python3.8/site-packages (from modelscope) (4.65.0)
      Requirement already satisfied: dill<0.3.7,>=0.3.0 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.3.6)
      Requirement already satisfied: multiprocess in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.70.14)
      Requirement already satisfied: aiohttp in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (3.8.4)
      Requirement already satisfied: responses<0.19 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.18.0)
      Requirement already satisfied: huggingface-hub<1.0.0,>=0.11.0 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (0.16.4)
      Requirement already satisfied: fsspec[http]>=2021.11.1 in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (2023.4.0)
      Requirement already satisfied: packaging in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (21.3)
      Requirement already satisfied: xxhash in /opt/*/lib/python3.8/site-packages (from datasets<=2.13.0,>=2.8.0->modelscope) (3.2.0)
      Requirement already satisfied: six>=1.5 in /opt/*/lib/python3.8/site-packages (from python-dateutil>=2.1->modelscope) (1.16.0)
      Requirement already satisfied: certifi>=2017.4.17 in /opt/*/lib/python3.8/site-packages (from requests>=2.25->modelscope) (2022.9.24)
      Requirement already satisfied: charset-normalizer<3,>=2 in /opt/*/lib/python3.8/site-packages (from requests>=2.25->modelscope) (2.0.4)
      Requirement already satisfied: idna<4,>=2.5 in /opt/*/lib/python3.8/site-packages (from requests>=2.25->modelscope) (3.4)
      Requirement already satisfied: aliyun-python-sdk-kms>=2.4.1 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (2.16.0)
      Requirement already satisfied: aliyun-python-sdk-core>=2.13.12 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (2.13.36)
      Requirement already satisfied: crcmod>=1.7 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (1.7)
      Requirement already satisfied: pycryptodome>=3.4.7 in /opt/*/lib/python3.8/site-packages (from oss2->modelscope) (3.15.0)
      Requirement already satisfied: pytz>=2020.1 in /opt/*/lib/python3.8/site-packages (from pandas->modelscope) (2022.7.1)
      Requirement already satisfied: cryptography>=2.6.0 in /opt/*/lib/python3.8/site-packages (from aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (38.0.3)
      Requirement already satisfied: jmespath<1.0.0,>=0.9.3 in /opt/*/lib/python3.8/site-packages (from aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (0.10.0)
      Requirement already satisfied: async-timeout<5.0,>=4.0.0a3 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (4.0.2)
      Requirement already satisfied: yarl<2.0,>=1.0 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (1.8.2)
      Requirement already satisfied: frozenlist>=1.1.1 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (1.3.3)
      Requirement already satisfied: multidict<7.0,>=4.5 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (6.0.4)
      Requirement already satisfied: aiosignal>=1.1.2 in /opt/*/lib/python3.8/site-packages (from aiohttp->datasets<=2.13.0,>=2.8.0->modelscope) (1.3.1)
      Requirement already satisfied: typing-extensions>=3.7.*.* in /opt/*/lib/python3.8/site-packages (from huggingface-hub<1.0.0,>=0.11.0->datasets<=2.13.0,>=2.8.0->modelscope) (4.4.0)
      Requirement already satisfied: pyparsing!=3.0.5,>=2.0.2 in /opt/*/lib/python3.8/site-packages (from packaging->datasets<=2.13.0,>=2.8.0->modelscope) (3.0.9)
      Requirement already satisfied: cffi>=1.12 in /opt/*/lib/python3.8/site-packages (from cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (1.15.1)
      Requirement already satisfied: pycparser in /opt/*/lib/python3.8/site-packages (from cffi>=1.12->cryptography>=2.6.0->aliyun-python-sdk-core>=2.13.12->oss2->modelscope) (2.21)
      Installing collected packages: sortedcontainers, simplejson, gast, modelscope
      Successfully installed gast-0.5.4 modelscope-1.9.5 simplejson-3.19.2 sortedcontainers-2.4.0
      WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
    3. Insira no ambiente Python.

    4. python
    5. O código a seguir baixa os arquivos do modelo Qwen-7B.

    6. # ### 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
    7. Pressione Ctrl+D para sair do ambiente Python.

    8. Execute o comando a seguir para mover o modelo Qwen baixado para a pasta correspondente.

    9. # 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-hf

    Baixar 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

  1. 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
  2. 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_dataset
    

    Após a execução do comando, a estrutura de arquivos do diretório qwen-datasets será a seguinte. Uma nova pasta wudao é adicionada.

    qwen-datasets
    ├── wudao_200g 
    └── wudao
        └── merged_wudao_cleaned.json
  3. 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.json
    

    Após a execução do comando, a estrutura de arquivos do diretório qwen-datasets será a seguinte. Uma nova pasta cleaned_zst é adicionada, contendo 10 arquivos compactados.

    qwen-datasets
    ├── wudao_200g
    ├── wudao
    └── cleaned_zst
        ├── 00.jsonl.zst
    		│   ...
        └── 09.jsonl.zst
  4. 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:

    1. 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
    2. No Terminal, execute o comando a seguir para converter os dados para o formato MMAP.

      Após a execução do comando, os arquivos .bin e .idx sã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_zst

      A 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 .bin e .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:

  • Qwen-7B: 1.

  • Qwen-14B: 2.

  • Qwen-72B: 8.

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:

  • Qwen-7B: 1.

  • Qwen-14B: 1.

  • Qwen-72B: 2.

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:

  • dsw

  • dlc

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:

  • 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

  • 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 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:

  1. Acesse a página Create Job.

    1. Faça login no PAI console, selecione a região e o workspace alvo e clique em Deep Learning Containers (DLC).

    2. Na página Deep Learning Containers (DLC), clique em Create Job.

  2. 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-llm na 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

      Nota

      O número de núcleos de CPU não pode exceder 96.

    • Memory (GiB): 1024

    • Shared Memory (GiB): 1024

  3. 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/.

  1. 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.

  2. 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.

  1. Baixe a amostra de teste pred_input.jsonl e faça upload para o diretório /mnt/workspace no DSW. Upload and download files.

    Nota

    A estrutura dos dados para inferência deve corresponder à estrutura usada no ajuste fino.

  2. 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 }/checkpoint e está no mesmo nível de latest_checkpointed_iteration.txt.

    Nota

    Substitua 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/
  3. 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.

    Nota

    Antes 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.2

    A 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.

    Importante

    Substitua pelo caminho do seu modelo.

    MODEL_SIZE=$4

    Tamanho do modelo: 7B, 14B ou 72B.

    TP=$5

    Grau de paralelismo do modelo.

    Importante
    • Se 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.

    Nota

    Apenas 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.

  1. 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 \
    true

    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 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_**.

    Importante
    • Substitua 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.

  2. Copie os arquivos .json, .py e .tiktoken da pasta do modelo HuggingFace open source /mnt/workspace/qwen-ckpts/qwen-7b-hf para o diretório /mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1 para garantir que o modelo possa ser utilizado.

    Importante

    Note que não é necessário copiar o arquivo pytorch_model.bin.index.json.

Realizar inferência offline no modelo HuggingFace

Utilize o pipeline de inferência HuggingFace & DeepSpeed para inferência offline no modelo convertido. Para o Qwen-7B, crie um arquivo infer.py com o conteúdo a seguir e execute-o para avaliar o desempenho do modelo.

#!/usr/bin/env python
#encoding=utf-8
from transformers import AutoTokenizer, LlamaTokenizer
from transformers import LlamaForCausalLM
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
 
checkpoint = '/mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1'
print(checkpoint)
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained(checkpoint, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(checkpoint,device_map="auto", trust_remote_code=True)
 
prompts= 'Write a quicksort algorithm'
p = f"Human:{prompts}"
print(p)
inputs = tokenizer.encode(p, return_tensors="pt").to(model.device)
outputs = model.generate(inputs,max_new_tokens=512)
print(tokenizer.decode(outputs[0]))

Substitua checkpoint pelo caminho do seu modelo HuggingFace convertido. Este guia utiliza /mnt/workspace/qwen-ckpts/qwen-7b-mg-to-hf-tp1-pp1.

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

  1. 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).

  2. Clique em Deploy Service. Na seção Inference Service, clique em Custom Deployment na seção Custom Model Deployment.

  3. 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

  4. 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.

  1. 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.

  2. Na página WebUI, realize a inferência do modelo.