如何使用llama-stack模型微调API:PostTraining功能实战教程

【免费下载链接】llama-stack Composable building blocks to build Llama Apps 【免费下载链接】llama-stack 项目地址: https://gitcode.com/GitHub_Trending/ll/llama-stack

llama-stack是一个用于构建Llama应用程序的可组合构建块集合,其PostTraining API提供了强大的模型微调功能,让开发者能够轻松地对模型进行监督微调、偏好优化等操作。本教程将详细介绍如何使用llama-stack的PostTraining API进行模型微调实战。

PostTraining API概述 📚

PostTraining API是llama-stack提供的核心功能之一,允许开发者使用多种提供商和框架对模型进行微调。目前支持的主要提供商包括:

  • HuggingFace SFTTrainer (inline::huggingface) - 使用HuggingFace生态系统进行微调
  • TorchTune (inline::torchtune) - 使用Meta的TorchTune框架进行微调
  • NVIDIA (remote::nvidia) - 使用NVIDIA的平台进行微调

llama-stack模型微调流程 图:llama-stack模型生命周期,包含PostTraining微调阶段

快速开始:环境准备 🔧

在使用PostTraining API之前,需要先安装llama-stack并启动服务。以下是基本的安装和启动步骤:

# 克隆仓库
git clone https://gitcode.com/GitHub_Trending/ll/llama-stack

# 进入项目目录
cd llama-stack

# 安装依赖
./scripts/install.sh

# 启动服务(使用starter分发)
llama stack run starter

核心功能与使用方法 ✨

1. 监督微调(Supervised Fine-Tuning)

监督微调是最常用的模型微调方法,llama-stack提供了简单易用的API来实现这一功能。

关键参数说明

监督微调主要通过SupervisedFineTuneRequest对象进行配置,核心参数包括:

  • job_uuid: 作业唯一标识符
  • training_config: 训练配置,包含数据配置、优化器配置等
  • algorithm_config: 算法配置,如LoRA或QAT
  • model: 要微调的基础模型
  • checkpoint_dir: checkpoint保存目录
代码示例
from llama_stack_client import LlamaStackClient
from llama_stack_client.types import post_training_supervised_fine_tune_params, algorithm_config_param

# 创建客户端
client = LlamaStackClient(base_url="http://localhost:8321")

# 注册数据集
client.datasets.register(
    purpose="post-training/messages",
    source={"type": "uri", "uri": "huggingface://datasets/llamastack/simpleqa?split=train"},
    dataset_id="simpleqa",
)

# 配置训练参数
training_config = post_training_supervised_fine_tune_params.TrainingConfig(
    data_config=post_training_supervised_fine_tune_params.TrainingConfigDataConfig(
        batch_size=32,
        data_format="instruct",
        dataset_id="simpleqa",
        shuffle=True,
    ),
    gradient_accumulation_steps=1,
    n_epochs=4,
)

# 配置LoRA算法
algorithm_config = algorithm_config_param.LoraFinetuningConfig(
    alpha=16,
    apply_lora_to_mlp=True,
    apply_lora_to_output=False,
    lora_attn_modules=["q_proj", "v_proj"],
    rank=8,
    type="LoRA",
)

# 启动微调作业
job_uuid = f"finetune-job-{uuid.uuid4()}"
response = client.post_training.supervised_fine_tune(
    job_uuid=job_uuid,
    model="ibm-granite/granite-3.3-8b-instruct",
    training_config=training_config,
    algorithm_config=algorithm_config,
    checkpoint_dir="./output_checkpoints",
    logger_config={},
    hyperparam_search_config={},
)

2. 偏好优化(Preference Optimization)

偏好优化是通过人类反馈来优化模型输出的方法,llama-stack支持DPO(Direct Preference Optimization)等算法。

关键参数说明
  • finetuned_model: 要优化的基础微调模型
  • algorithm_config: DPO等算法的配置参数
  • dataset_id: 偏好数据集ID
代码示例
from llama_stack_client.types import post_training_preference_optimize_params

# 配置DPO算法
dpo_config = post_training_preference_optimize_params.DPOAlignmentConfig(
    beta=0.1,
    loss_type="sigmoid"
)

# 启动偏好优化作业
job_uuid = f"preference-job-{uuid.uuid4()}"
response = client.post_training.preference_optimize(
    job_uuid=job_uuid,
    finetuned_model="path/to/fine-tuned-model",
    algorithm_config=dpo_config,
    training_config=training_config,
    dataset_id="preference-dataset",
    validation_dataset_id="preference-validation-dataset",
    logger_config={},
    hyperparam_search_config={},
)

3. 作业管理

llama-stack提供了完整的作业管理功能,可以轻松监控和管理微调作业。

# 获取作业状态
status = client.post_training.get_training_job_status(job_uuid=job_uuid)
print(f"Job status: {status.status}")

# 列出所有作业
jobs = client.post_training.get_training_jobs()
print(f"All jobs: {jobs.data}")

# 获取作业 artifacts
artifacts = client.post_training.get_training_job_artifacts(job_uuid=job_uuid)
print(f"Checkpoints: {artifacts.checkpoints}")

# 取消作业(如果需要)
# client.post_training.cancel_training_job(job_uuid=job_uuid)

模型微调评估流程 图:llama-stack模型微调评估流程

高级配置选项 ⚙️

1. 训练配置(TrainingConfig)

训练配置控制整个训练过程,主要参数包括:

training_config = post_training_supervised_fine_tune_params.TrainingConfig(
    n_epochs=4,  # 训练轮数
    max_steps_per_epoch=1000,  # 每轮最大步数
    gradient_accumulation_steps=4,  # 梯度累积步数
    max_validation_steps=100,  # 验证最大步数
    data_config=DataConfig(...),  # 数据配置
    optimizer_config=OptimizerConfig(...),  # 优化器配置
    efficiency_config=EfficiencyConfig(...),  # 效率配置
    dtype="bf16"  # 数据类型
)

2. 优化器配置(OptimizerConfig)

optimizer_config = post_training_supervised_fine_tune_params.OptimizerConfig(
    optimizer_type="adamw",  # 优化器类型
    lr=2e-5,  # 学习率
    weight_decay=0.01,  # 权重衰减
    num_warmup_steps=100  # 预热步数
)

3. 效率配置(EfficiencyConfig)

对于资源受限的环境,可以配置效率优化选项:

efficiency_config = post_training_supervised_fine_tune_params.EfficiencyConfig(
    enable_activation_checkpointing=True,  # 启用激活检查点
    enable_activation_offloading=True,  # 启用激活卸载
    memory_efficient_fsdp_wrap=True,  # 启用内存高效FSDP包装
    fsdp_cpu_offload=True  # 启用FSDP CPU卸载
)

不同提供商使用指南 🔄

HuggingFace SFTTrainer

HuggingFace SFTTrainer是一个内联后训练提供商,允许使用HuggingFace生态系统对各种模型进行监督微调。

# 配置示例
post_training:
  - provider_id: huggingface
    provider_type: inline::huggingface
    config:
      device: cuda  # 或 "cpu" 或 "mps"
      checkpoint_format: huggingface
      max_seq_length: 2048
      gradient_checkpointing: true

启动命令:

llama stack list-deps starter | xargs -L1 uv pip install
llama stack run starter

TorchTune

TorchTune是Meta提供的PyTorch微调框架,特别适合Meta的Llama系列模型。

# 配置示例
post_training:
  - provider_id: torchtune
    provider_type: inline::torchtune
    config:
      checkpoint_format: meta
      torch_seed: 42

NVIDIA

NVIDIA提供商允许在NVIDIA平台上进行模型微调。

# 配置示例
post_training:
  - provider_id: nvidia
    provider_type: remote::nvidia
    config:
      api_key: ${env.NVIDIA_API_KEY}
      project_id: my-llama-project
      customizer_url: https://api.nvidia.com/nemo-customizer/v1

最佳实践与注意事项 💡

  1. 选择合适的提供商

    • HuggingFace:兼容性广,支持多种模型和数据集
    • TorchTune:对Meta模型支持最佳
    • NVIDIA:适合使用NVIDIA生态系统的场景
  2. 硬件配置

    • 根据可用硬件选择合适的设备配置(CPU/GPU/MPS)
    • 对于GPU,确保有足够的显存,可使用LoRA等参数高效方法
  3. 数据集准备

    • 确保数据集格式与所选提供商匹配(instruct或dialog格式)
    • 建议准备验证数据集以监控过拟合
  4. 超参数调优

    • 学习率:通常在1e-5到5e-5之间
    • 批大小:根据硬件内存调整
    • LoRA参数:rank通常在4-32之间,alpha通常设置为rank的2倍
  5. 监控与评估

    • 定期检查作业状态
    • 分析训练日志和指标
    • 使用评估工具评估微调后模型性能

总结

llama-stack的PostTraining API为模型微调提供了强大而灵活的工具集,支持多种框架和提供商。通过本教程,您应该已经了解了如何使用这些API进行模型微调的基本流程和最佳实践。无论是监督微调还是偏好优化,llama-stack都能提供简单易用且功能丰富的接口,帮助您快速构建和优化Llama模型。

要深入了解更多细节,请参考官方文档:docs/docs/advanced_apis/post_training.mdx

【免费下载链接】llama-stack Composable building blocks to build Llama Apps 【免费下载链接】llama-stack 项目地址: https://gitcode.com/GitHub_Trending/ll/llama-stack

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐