资讯动态

使用 SkyPilot 微调 Falcon-7B 与 Falcon-40B:QLoRA 配置、云端调度与成本实操指南

发布时间:2026/9/16 22:49:19 来源:尧图企业网站定制
使用 SkyPilot 微调 Falcon-7B 与 Falcon-40BQLoRA 配置、云端调度与成本实操指南【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot本指南基于仓库 llm/falcon 目录下的完整微调工程讲解如何用 SkyPilot 在单张 A100 系列 GPU 上以 QLoRA 方式微调 Falcon-7B 与 Falcon-40B 开源大语言模型。读完本文你将掌握如何读懂并改造 falcon.yaml 训练配置、如何用一条命令在任意云上以最低成本调度 Spot 实例跑完训练、模型权重如何自动回传到对象存储以及常见桶权限问题的排查方法。Falcon 微调方案概览为什么选择 SkyPilotFalcon 是 TIITechnology Innovation Institute发布的开源大语言模型系列其中的 Falcon-7B 与 Falcon-40B 在发布时即对标多款当时的闭源商用模型。在 llm/falcon 中仓库提供了一个开箱即用的完整微调流水线核心思路是使用QLoRA4-bit 量化 LoRA 低秩适配技术把动辄几十 GB 的模型权重压缩加载到单张 GPU 上只训练少量适配器参数使用 Hugging Facetrl的SFTTrainer在指令数据默认 Open Assistant 的 Guanaco 数据集上做监督微调由SkyPilot 负责云资源编排自动在多个云之间挑选当前可用的最便宜实例、自动创建对象存储桶存放权重、支持用 Spot 实例降低成本并自动容错重启。整套工程只有三个文件falcon.yamlSkyPilot 任务定义、train.py训练脚本和本 README。这意味着从零开始到开始训练只需改几个环境变量、执行一条命令。前置条件安装 SkyPilot 与检查云凭证README 给出的前置条件非常简单两条命令pip install SkyPilot 最新版本 sky check其中sky check会检测当前环境已配置的云厂商凭证AWS、GCP、Azure、Lambda Cloud 等并输出各云是否可用。SkyPilot 本身在该仓库根目录由 setup.py 定义打包配置训练执行与作业调度入口位于 sky/cli.py。提示README 写作时说明 Serving模型服务化与微调后评估evaluate步骤仍在开发中因此当前目录只提供训练部分微调产出的权重通过对象存储回传后可结合仓库 llm/vllm 等 serving 示例自行部署。微调配置全解析falcon.yaml训练的核心配置文件是 falcon.yaml它是一份标准的 SkyPilot Task YAML。下面按区块逐段解读。resourcesGPU 与磁盘需求resources: accelerators: A100-80GB:1 disk_size: 1000 disk_tier: bestaccelerators: A100-80GB:1申请 1 张 80GB 显存的 A100也可换用 40GB 型号见后文模型与显存预算。disk_size: 1000为实例分配 1000 GB 系统盘。Falcon-40B 的全量权重与训练中间产物较大这是保证训练中途不因磁盘写满而失败的关键参数。disk_tier: best选用最高性能的磁盘档位减少大数据集与检查点的读写开销。workdir随任务上传的工作目录workdir: .将当前目录即llm/falcon包含train.py自动同步到云端实例相当于无需手动scp即可把训练脚本带到远端。envs模型与输出桶envs: MODEL_NAME: tiiuae/falcon-7b # [ybelkada/falcon-7b-sharded-bf16, tiiuae/falcon-7b, tiiuae/falcon-40b] OUTPUT_BUCKET_NAME: # Set a unique name for the bucket which will store model weightsMODEL_NAME基础模型在 Hugging Face Hub 上的名称三个可选值已写在注释中见下文模型与显存预算。OUTPUT_BUCKET_NAME必须替换为你自己的全局唯一桶名。SkyPilot 会在你的云账号下自动创建该私有桶用于存放训练产出的模型权重。secrets训练密钥secrets: WANDB_API_KEY: null # Pass with --secret WANDB_API_KEY in CLIWANDB_API_KEY被声明为密钥secret不在 YAML 中明文填写而是通过命令行--secret WANDB_API_KEY传入避免 API Key 泄露进版本库。这在 sky/client/cli/flags.py 中有完整定义支持--secret API_KEYsecret123直接赋值或--secret JWT_SECRET读取本机同名环境变量的两种形式并说明其优先级高于--secret-file。file_mounts把模型权重挂到对象存储file_mounts: /results: # Change if the output_dir parameter is changed below name: $OUTPUT_BUCKET_NAME mode: MOUNT将云端实例上的/results目录挂载到$OUTPUT_BUCKET_NAME对应的对象存储桶mode: MOUNT表示实时挂载模式。这样训练过程中train.py写往/results的检查点会直接落到云对象存储训练结束后无需额外下载步骤即可在本地拿到权重。该模式的底层实现在 sky/data/storage.pyStorageMode.MOUNT是默认存储模式见 sky/data/storage.py#L336-L347对象存储抽象Storage的 MOUNT/COPY 语义在 sky/data/storage.py#L785-L857 有详细注释。setup一键搭建训练环境setup: | # Setup the environment conda activate falcon if [ $? -ne 0 ]; then conda create -n falcon python3.10 -y conda activate falcon fi # Install dependencies pip install -q -U transformers accelerate peft pip install -q trl0.4.6 datasets bitsandbytes einops wandb scipy torchsetup段在首次创建实例时执行一次负责创建名为falcon的 Python 3.10 conda 环境并安装依赖其中关键组件为依赖作用transformers/accelerate/peft模型加载、分布式加速与 LoRA 适配器trl0.4.6SFTTrainer监督微调 Trainer版本被固定以保证接口兼容bitsandbytes4-bit 量化加载QLoRA 的基础datasets加载 Hugging Face 数据集wandb训练日志与可视化配合WANDB_API_KEYeinops/scipy/torch模型运行时的算子与科学计算依赖run启动训练run: | conda activate falcon wandb login $WANDB_API_KEY echo Starting training... python train.py \ --model_name $MODEL_NAME \ --max_seq_len 2048 \ --bf16 \ --group_by_length \ --bnb_4bit_compute_dtype bfloat16 \ --max_steps 500 \ --dataset_name timdettmers/openassistant-guanaco \ --output_dir /resultsrun段在每次任务启动时执行依次完成 wandb 登录并启动训练。关键训练超参数参数值含义--max_seq_len 20482048序列最大长度train.py 中SFTTrainer的max_seq_length默认 512此处加长以容纳 Guanaco 长指令样本--bf16开启使用 bfloat16 混合精度A100 等 Ampere 架构支持--group_by_length开启按序列长度分组打包批次显著节省显存并加速--bnb_4bit_compute_dtype bfloat16bfloat164-bit 量化计算时反量化使用的计算精度--max_steps 500500最多优化 500 步--dataset_name timdettmers/openassistant-guanaco默认数据集训练数据源可换成任意 Hugging Face 数据集--output_dir /results/results检查点输出目录与file_mounts的挂载点对应train.pyQLoRA 训练脚本原理train.py 由 Hugging Face 社区经典的pacman100QLoRA 训练 gist 改编而来完整覆盖了4-bit 量化加载 → LoRA 注入 → SFT 微调三个环节。4-bit 量化加载BitsAndBytesConfigtrain.py#L145-L189 中的create_and_prepare_model使用BitsAndBytesConfig以 4-bit 精度加载基础模型bnb_config BitsAndBytesConfig( load_in_4bitargs.use_4bit, bnb_4bit_quant_typeargs.bnb_4bit_quant_type, # 默认 nf4 bnb_4bit_compute_dtypecompute_dtype, # 计算精度float16 / bfloat16 bnb_4bit_use_double_quantargs.use_nested_quant, # 是否开启双重量化 ) model AutoModelForCausalLM.from_pretrained( args.model_name, quantization_configbnb_config, device_map{: 0}, # 单卡部署 trust_remote_codeTrue, # Falcon 需要运行其自定义代码 )脚本会检测 GPU 算力torch.cuda.get_device_capability()train.py#L155-L162当算力版本 ≥ 8即 Ampere 及以后时提示可用--bf16加速。LoRA 适配器配置peft_config LoraConfig( lora_alpha16, lora_dropout0.1, r64, biasnone, task_typeCAUSAL_LM, target_modules[query_key_value, dense, dense_h_to_4h, dense_4h_to_h], )针对 Falcon 的注意力与 FFN 结构query_key_value、dense、dense_h_to_4h、dense_4h_to_h注入 LoRA 低秩适配器r64、alpha16。训练时只更新这些适配器参数其余权重保持 4-bit 冻结这是 7B/40B 模型能在单卡上训练的根本原因。SFTTrainer 与精度处理train.py#L213-L235 使用trl.SFTTrainer直接消费datasets加载的文本数据dataset_text_fieldtext并按TrainingArguments中配置的per_device_train_batch_size4、gradient_accumulation_steps4、learning_rate2e-4、optimpaged_adamw_32bit、lr_scheduler_typeconstant、warmup_ratio0.03、max_steps10000等参数训练。训练结束后遍历模型将 LoRA 层转成 bf16、LayerNorm 层保持 float32、lm_head/embed 层按需转 bf16train.py#L224-L233保证推理精度与训练稳定。选择模型与 GPU 显存预算README 给出的选型原则核心是显存容量你的 GPU 显存推荐模型说明≤ 40 GB如 A100-40GBybelkada/falcon-7b-sharded-bf16分片加载的 7B 模型40GB 显存即可80 GB如 A100-80GBtiiuae/falcon-7b或tiiuae/falcon-40b可用完整版 7B 与 40B即40GB 显存只能跑分片版 7B80GB 显存可以跑完整版 7B 和 40B。可用sky gpus list --all查看当前 SkyPilot 支持的全部 GPU 型号与可用区域。注意上述显存结论建立在 README 撰写时 4-bit 量化 分片加载技术的基础上实际占用还取决于max_seq_len、batch size 等参数建议先用max_seq_len较小配置试跑确认。一条命令开始微调Spot 与按需实例配置就绪后微调可以完全自动地进行——SkyPilot 会根据资源需求在所有已配置的云上搜索当前可用的最便宜 VM使用 Spot 实例推荐可中断自动恢复sky jobs launch --use-spot -n falcon falcon.yamlsky jobs launch将任务作为托管作业managed job提交入口见 sky/jobs/client/sdk.py 的launch--use-spot强制使用 Spot/抢占式实例以显著降低成本。README 特别指出此类A100-80GB:1Spot 实例在当时仅 AWS 与 GCP 提供。使用按需实例可选不中断sky launch -c falcon -s falcon.yaml --no-use-spot-c falcon指定集群名--no-use-spot显式关闭 Spot。README 指出按需A100-80GB:1在当时可用区域覆盖 Lambda Cloud、Azure 与 GCP。换用不同数据集只需把run段中--dataset_name的值默认timdettmers/openassistant-guanaco替换为任何其他 Hugging Face 数据集名称即可无需改动脚本。参考耗时与成本README 给出了基于当时 Spot 单卡报价A100 约 $1.1/小时、A100-80GB 约 $1.61/小时在 500 步--max_steps 500下的估算参考模型时长预估成本ybelkada/falcon-7b-sharded-bf162.5 ~ 3 小时1×A100 Spot≈ $3.3tiiuae/falcon-7b2.5 ~ 3 小时1×A100 Spot≈ $3.3tiiuae/falcon-40b10 小时1×A100-80GB Spot≈ $16.10以上成本为 README 撰写时的估算不代表当前各云实时报价实际费用请以sky jobs launch输出与各云账单为准。README 中还附有训练 loss 曲线示意图原图为外部托管图片此处不再转引。常见问题StorageBucketGetError 与桶权限README 专门记录了一个高频报错。当出现sky.exceptions.StorageBucketGetError: Failed to connect to an existing bucket YOUR_OWN_BUCKET_NAME. Please check if: 1. the bucket name is taken and/or 2. the bucket permissions are not setup correctly. To debug, consider using gsutil ls gs://YOUR_OWN_BUCKET_NAME.原因几乎总是envs里的OUTPUT_BUCKET_NAME仍是占位值或该桶名已被他人占用。解决方法是换成全局唯一的桶名后重跑命令——只要桶名未被占用SkyPilot 会在你的云账号下自动创建新的私有桶对应file_mounts中mode: MOUNT的自动建桶逻辑见 sky/data/storage.py无需手动预建。该异常类型定义于 sky/exceptions.py。从源码看云端执行链路若想深入了解这条命令背后发生了什么可以沿着以下源码路径继续阅读任务解析与作业提交sky/jobs/client/sdk.py 中的launch将 YAML 解析为 DAG 并提交托管作业Spot 支持通过override_argument{use_spot: True}开启见 sky/jobs/client/sdk.py#L981 附近密钥注入secrets区块与--secret命令行参数在 sky/client/cli/flags.py 中定义最终由后端在实例上注入为环境变量见 sky/backends/cloud_vm_ray_backend.py 的get_plaintext_envs_and_secrets对象存储挂载file_mounts的 MOUNT 模式在 sky/data/storage.py 中实现Storage抽象负责桶的自动创建与挂载训练权重因此得以持续回传。整体上这份 Falcon 微调示例展示了 SkyPilot 的典型用法YAML 声明资源与依赖、自动选云选价、Spot 容错托管、对象存储回传产物。把MODEL_NAME与--dataset_name换成你自己的模型和数据即可复用到绝大多数单卡 QLoRA 微调场景。【免费下载链接】skypilotThe AI Compute Platform for frontier teams. SkyPilot turns fragmented AI compute into one AI supercomputer, so frontier AI teams build custom intelligence faster.项目地址: https://gitcode.com/GitHub_Trending/sk/skypilot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价