用户指南#
本指南介绍如何配置 FlagScale 以及如何运行训练、推理、服务和强化学习任务。
第一步:配置 YAML 文件#
FlagScale 使用 Hydra 进行配置管理。每个任务由两个协同工作的 YAML 文件驱动:一个实验级文件和一个任务级文件,均位于 examples/ 目录下。运行任务前,需要先配置这些文件。
实验级 YAML#
以 examples/qwen3/conf/serve.yaml 为例说明此配置文件。
实验级文件是 flagscale 命令的入口。它定义了运行的全局上下文:
输出存储位置:
exp_dir: outputs/${experiment.exp_name}使用哪个后端引擎:
backend: vllm加载哪个任务级文件:
defaults: - serve: 8b
# 示例:examples/qwen3/conf/serve.yaml
defaults:
- _self_
- serve: 8b
experiment:
exp_name: qwen3_8b
exp_dir: outputs/${experiment.exp_name}
task:
type: serve
backend: vllm
runner:
hostfile: null
deploy:
use_fs_serve: false
envs:
CUDA_VISIBLE_DEVICES: 0
CUDA_DEVICE_MAX_CONNECTIONS: 1
action: run
hydra:
run:
dir: ${experiment.exp_dir}/hydra
任务级 YAML#
以 examples/qwen3/conf/serve/8b.yaml 为例说明此配置文件。
任务级 YAML 文件指定模型、数据集以及训练或推理等具体任务的参数。此文件中的每个参数都直接映射到后端引擎接受的参数,其中连字符(-)替换为下划线(\_)。
# 示例:examples/qwen3/conf/serve/8b.yaml
- serve_id: vllm_model
engine_args:
model: ${oc.env:QWEN3_PATH}
host: 0.0.0.0
uvicorn_log_level: warning
port: ${oc.env:QWEN3_PORT}
gpu_memory_utilization: 0.9
trust_remote_code: true
no_enable_prefix_caching: true
compilation_config: '{"full_cuda_graph": true}'
第二步:运行任务#
FlagScale 为各种任务提供统一的运行器,包括训练、推理、强化学习和服务。只需指定配置文件,即可通过一条 flagscale 命令运行任务。运行器会自动加载配置并执行任务。以下各节演示如何运行分布式训练任务。
训练#
需要 Megatron-LM-FL 环境
准备数据集演示和分词器:
mkdir -p ./data && cd ./data wget https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/datasets/enron_emails_demo_text_document_qwen/enron_emails_demo_text_document_qwen.idx wget https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/datasets/enron_emails_demo_text_document_qwen/enron_emails_demo_text_document_qwen.bin
下载分词器
mkdir -p ./qwentokenizer && cd ./qwentokenizer wget "https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/tokenizers/qwentokenizer/tokenizer_config.json" -O tokenizer_config.json wget "https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/tokenizers/qwentokenizer/qwen.tiktoken" -O qwen.tiktoken wget "https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/tokenizers/qwentokenizer/qwen_generation_utils.py" -O qwen_generation_utils.py wget "https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/tokenizers/qwentokenizer/tokenization_qwen.py" -O tokenization_qwen.py
修改任务级 YAML 文件中的数据集和分词器路径,以及实验级 YAML 文件中的模型名称 {style=lower-alpha}
任务级 YAML 文件:修改 ./examples/qwen3/conf/train/0\_6b.yaml 中的
data_path和tokenizer_path。
data: data_path: ./data/enron_emails_demo_text_document_qwen # 在此修改 data_path split: 1 no_mmap_bin_files: true tokenizer: legacy_tokenizer: true tokenizer_type: QwenTokenizerFS tokenizer_path: ./qwentokenizer # 在此修改 tokenizer_path vocab_size: 151936 make_vocab_size_divisible_by: 64
实验级 YAML:修改 ./examples/qwen3/conf/train.yaml 中的
train模型名称。该值必须与上述文件名 0\_6b.yaml 匹配。
defaults: - _self_ - train: 0_6b # 修改:train 值必须与其对应的配置文件名匹配
启动分布式训练任务:
flagscale train qwen3 --config ./examples/qwen3/conf/train.yaml # 或 flagscale train qwen3 -c ./examples/qwen3/conf/train.yaml
停止分布式训练任务:
flagscale train qwen3 --stop
推理#
需要 vLLM-FL 环境
下载推理模型
modelscope download --model Qwen/Qwen3-4B --local_dir ./Qwen3-4B
修改任务级 YAML 文件中的模型路径和实验级 YAML 文件中的模型名称 {style=lower-alpha}
任务级 YAML 文件:修改
./examples/qwen3/conf/inference/4b.yaml中的model路径。
llm: model: ./Qwen3-4B # 修改:设置模型目录 trust_remote_code: true tensor_parallel_size: 1 pipeline_parallel_size: 1 gpu_memory_utilization: 0.9 seed: 1234
实验级 YAML:修改
./examples/qwen3/conf/inference_fl.yaml中的inference模型名称。该值必须与上述文件名 4b.yaml 匹配。
defaults: - _self_ - inference: 4b # 修改:Inference 值必须与其对应的配置文件名匹配
启动推理:
flagscale inference qwen3 --config ./examples/qwen3/conf/inference_fl.yaml
# 或
flagscale inference qwen3 -c ./examples/qwen3/conf/inference_fl.yaml
服务#
下载服务模型
修改任务级 YAML 文件中的模型路径和实验级 YAML 文件中的模型名称 {style=lower-alpha}
任务级 YAML 文件:修改
./examples/qwen3/conf/serve/0_6b.yaml中的model路径。
- serve_id: vllm_model engine_args: model: ./Qwen3-0.6B # 修改:设置模型目录 host: 0.0.0.0 max_model_len: 4096 max_num_seqs: 4 uvicorn_log_level: warning port: 30000 # 您环境中可用的端口,例如:30000
实验级 YAML:修改
./examples/qwen3/conf/serve.yaml中的serve模型名称。
defaults: - _self_ - serve: 0_6b # 修改:Serve 值必须与其对应的配置文件名匹配 experiment: exp_name: qwen3-0.6b # 根据需要修改以便测试区分 exp_dir: outputs/${experiment.exp_name} task: type: serve backend: vllm runner: hostfile: null deploy: use_fs_serve: false envs: CUDA_VISIBLE_DEVICES: 0 CUDA_DEVICE_MAX_CONNECTIONS: 1
启动服务:
flagscale serve qwen3 --config ./examples/qwen3/conf/serve.yaml # 或 flagscale serve qwen3 -c ./examples/qwen3/conf/serve.yaml
停止服务:
flagscale serve qwen3 --stop
强化学习#
需要 verl-FL 环境
下载模型
modelscope download --model Qwen/Qwen3-0.6B --local_dir ./Qwen3-0.6B
下载数据集
mkdir gsm8k && cd gsm8k wget "https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/rl/datasets/gsm8k/train.parquet" wget "https://baai-flagscale.ks3-cn-beijing.ksyuncs.com/rl/datasets/gsm8k/test.parquet"
修改任务级 YAML 文件中的模型路径和实验级 YAML 文件中的模型名称 {style=lower-alpha}
任务级 YAML 文件:在
./examples/qwen3/conf/rl/0_6b.yaml中修改
train_files(训练数据集路径)和val_files(测试数据集路径)。
data: train_files: /workspace/data/gsm8k/train.parquet # 修改:设置您的训练数据集 val_files: /workspace/data/gsm8k/test.parquet # 修改:设置您的测试数据集 train_batch_size: 1024 max_prompt_length: 512 max_response_length: 1024 filter_overlong_prompts: true truncation: "error"
修改
path(模型检查点路径)。
actor_rollout_ref: model: path: /workspace/data/ckpt/Qwen3-0.6B # 修改:设置您的模型检查点目录 use_remove_padding: true enable_gradient_checkpointing: true trust_remote_code: true
实验级 YAML:修改
./examples/qwen3/conf/rl.yaml中的 exp\_dir(实验目录)和 runtime\_env(运行时环境路径)。
experiment: exp_name: 0_6b exp_dir: /workspace/qwen3-rl/ # 修改:设置您的实验目录 runner: runtime_env: /path/to/verl-FL/verl/trainer/runtime_env.yaml # 修改:设置您的 runtime_env.yaml
启动强化学习:
flagscale rl qwen3 --config ./examples/qwen3/conf/rl.yaml # 或 flagscale rl qwen3 -c ./examples/qwen3/conf/rl.yaml
您可以在实验目录中查看输出。
停止强化学习:
flagscale rl qwen3 --stop
或强制停止 Ray 集群。
ray stop