Unsloth+HuggingFace:完整模型上传流程演示
1. 为什么需要这个流程?——从训练到共享的闭环
你花了几小时微调出一个效果惊艳的医疗问答模型,结果发现它只躺在本地硬盘里?或者在Colab上跑得好好的,换台电脑就打不开?这正是很多开发者卡住的地方:训练完成只是起点,让模型真正可用、可分享、可复现,才是关键一步。
Unsloth确实让微调变得轻快——显存降70%,速度提2倍,但它的价值不止于训练环节。当你用model.push_to_hub_gguf()这一行代码把模型推送到Hugging Face时,你实际上完成了一次“AI成果交付”:别人能一键下载、直接用Ollama运行、甚至基于你的模型继续迭代。这不是技术细节,而是协作范式的转变。
本文不讲原理推导,不堆参数配置,只聚焦一件事:手把手带你走通从镜像环境启动 → 模型微调 → 本地保存 → Hugging Face上传 → Ollama部署的全链路。每一步都经过实测验证,所有命令可复制粘贴即用,连token配置这种容易踩坑的环节也拆解到点击级。
适合谁读?
- 刚用Unsloth跑通第一个微调任务,却卡在“然后呢?”的新手
- 想把私有模型安全发布到Hugging Face的实践者
- 需要向团队交付可运行模型资产的工程师
我们不假设你熟悉HF token、GGUF格式或Ollama语法——这些都会在对应环节自然带出,像教朋友一样说清楚。
2. 环境准备:从镜像启动到验证成功
2.1 启动unsloth镜像并进入WebShell
在CSDN星图镜像广场找到unsloth镜像,点击“启动实例”。等待状态变为“运行中”后,点击右侧“WebShell”按钮,即可进入终端界面。这是你整个流程的操作起点,无需本地安装任何依赖。
2.2 验证conda环境与Unsloth安装
镜像已预装好unsloth_env环境,但必须确认其可用性。依次执行以下三步:
# 查看当前所有conda环境,确认unsloth_env存在 conda env list# 激活unsloth专用环境(注意:不是base环境) conda activate unsloth_env# 检查Unsloth是否正确加载——成功时会显示版本号和欢迎信息 python -m unsloth正确输出示例:
Unsloth v2024.12.1 - Fast LLM fine-tuning for everyone!
❌ 若报错ModuleNotFoundError: No module named 'unsloth',说明环境未激活或镜像异常,请重启实例重试。
这三步看似简单,却是后续所有操作的基础。很多用户失败并非代码问题,而是卡在环境没激活——别跳过验证,这是最值得花30秒检查的环节。
3. 模型微调:精简版实战(以医疗问答为例)
3.1 加载基础模型与分词器
我们选用unsloth/DeepSeek-R1-Distill-Llama-8B作为基座模型,它已在Unsloth框架下深度优化,支持4位量化加载:
from unsloth import FastLanguageModel import torch max_seq_length = 2048 dtype = None load_in_4bit = True model, tokenizer = FastLanguageModel.from_pretrained( model_name = "unsloth/DeepSeek-R1-Distill-Llama-8B", max_seq_length = max_seq_length, dtype = dtype, load_in_4bit = load_in_4bit, )小贴士:
load_in_4bit=True是关键——它让8B模型仅需约6GB显存即可运行,普通T4 GPU完全够用。若你使用A10/A100,可设为False以获得更高精度。
3.2 格式化医疗数据集
我们采用shibing624/medical数据集的finetune子集,前200条样本足够验证流程:
from datasets import load_dataset EOS_TOKEN = tokenizer.eos_token dataset = load_dataset("shibing624/medical", "finetune", split="train[0:200]", trust_remote_code=True) def formatting_prompts_func(examples): inputs = examples["instruction"] cots = examples["input"] # 复杂思考过程 outputs = examples["output"] # 标准答案 texts = [] for input, cot, output in zip(inputs, cots, outputs): text = f"""以下是描述任务的指令,以及提供进一步上下文的输入。 请写出一个适当完成请求的回答。 在回答之前,请仔细思考问题,并创建一个逻辑连贯的思考过程,以确保回答准确无误。 ### 指令: 你是一位精通医学知识的医生,能够回答关于疾病、治疗方案和健康建议的问题。 请回答以下医疗问题。 ### 问题: {input} ### 回答: <思考> {cot} </思考> {output}""" + EOS_TOKEN texts.append(text) return {"text": texts} dataset = dataset.map(formatting_prompts_func, batched=True)数据验证:运行
print(dataset["text"][0][:200]),应看到类似### 问题:高血压患者可以吃香蕉吗?\n\n### 回答:<思考>...的结构化文本。若出现乱码或KeyError,请检查column_names是否为['instruction', 'input', 'output']。
3.3 配置LoRA微调并启动训练
启用Unsloth的PEFT(参数高效微调)能力,仅更新0.1%参数即可获得显著效果提升:
from unsloth import is_bfloat16_supported from trl import SFTTrainer from transformers import TrainingArguments FastLanguageModel.for_training(model) model = FastLanguageModel.get_peft_model( model, r = 16, target_modules = ["q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj"], lora_alpha = 16, lora_dropout = 0, bias = "none", use_gradient_checkpointing = "unsloth", random_state = 3407, ) trainer = SFTTrainer( model = model, tokenizer = tokenizer, train_dataset = dataset, dataset_text_field = "text", max_seq_length = max_seq_length, dataset_num_proc = 2, packing = False, args = TrainingArguments( per_device_train_batch_size = 2, gradient_accumulation_steps = 4, warmup_steps = 5, max_steps = 75, learning_rate = 2e-4, fp16 = not is_bfloat16_supported(), bf16 = is_bfloat16_supported(), logging_steps = 1, optim = "adamw_8bit", weight_decay = 0.01, lr_scheduler_type = "linear", seed = 3407, output_dir = "outputs", report_to = "none", ), ) trainer.train()⏱ 时间预期:在T4 GPU上约25分钟完成75步训练。观察
loss值从初始2.1降至0.8左右即表明训练有效。若loss不下降,请检查dataset.map是否成功执行(打印len(dataset)应为200)。
4. 模型导出:生成GGUF格式并本地保存
4.1 为什么选GGUF格式?
GGUF是Ollama官方指定的模型格式,它把模型权重、分词器、超参数全部打包进单个二进制文件,无需额外配置即可运行。相比传统的pytorch_model.bin,GGUF具备三大优势:
- 开箱即用:Ollama直接识别,无需写
Modelfile - 量化友好:原生支持Q4_K_M、Q5_K_M等主流量化方法
- 跨平台:Windows/macOS/Linux均可直接加载
4.2 执行GGUF导出
在训练完成后,执行以下命令生成8位量化模型(平衡精度与体积):
# 确保仍在unsloth_env环境中 # 导出为Q8_0格式(最高精度,文件较大) model.save_pretrained_gguf("medical_model_q8", tokenizer, quantization_method="Q8_0") # 或导出为Q4_K_M格式(推荐:体积小,精度损失极小) model.save_pretrained_gguf("medical_model_q4", tokenizer, quantization_method="Q4_K_M")输出目录:执行后会在当前路径生成
medical_model_q4/文件夹,内含ggml-model-Q4_K_M.gguf文件。这是你后续上传的核心资产。
5. Hugging Face上传:从本地文件到公开仓库
5.1 获取Hugging Face Token
- 访问 Hugging Face Settings → Access Tokens
- 点击“New token”,名称填
unsloth-upload,权限勾选Write(仅此一项) - 点击“Generate Token”,立即复制(页面关闭后无法再次查看)
安全提醒:Token是密码级凭证,切勿截图、上传至GitHub或发给他人。如泄露,立即在HF后台删除。
5.2 创建模型仓库并上传
在WebShell中执行以下命令(将YOUR_USERNAME替换为你的真实HF用户名):
# 安装Hugging Face Hub客户端(镜像已预装,此步验证) pip install huggingface-hub # 登录HF(输入上一步复制的token) huggingface-cli login # 创建新仓库(若已存在则跳过) huggingface-cli repo create YOUR_USERNAME/medical-finetuned --private --repo-type model # 上传GGUF文件(注意路径与文件名) cd medical_model_q4 huggingface-cli upload YOUR_USERNAME/medical-finetuned ggml-model-Q4_K_M.gguf .成功标志:终端显示
100%|██████████| 2.12G/2.12G [05:23<00:00]及Upload successful。
仓库地址:https://huggingface.co/YOUR_USERNAME/medical-finetuned
5.3 仓库优化:添加README与标签
登录Hugging Face网页端,进入刚创建的仓库,点击Edit按钮修改README.md:
--- tags: - unsloth - medical - llama - gguf - ollama license: mit --- # Medical-Finetuned Model A Llama-based model fine-tuned on Chinese medical Q&A data using Unsloth. ## How to use with Ollama ```bash ollama run hf.co/YOUR_USERNAME/medical-finetuned> 标签(tags)至关重要:添加`unsloth`、`gguf`、`ollama`等标签,能让其他用户通过搜索快速发现你的模型。 --- ## 6. 最终验证:用Ollama运行你的模型 ### 6.1 本地Ollama安装与配置 若尚未安装Ollama,请访问 [ollama.com](https://ollama.com/) 下载对应系统版本。安装后验证: ```bash # 检查Ollama服务状态 ollama list # 拉取并运行你的模型(自动下载GGUF文件) ollama run hf.co/YOUR_USERNAME/medical-finetuned🧪 实时测试:进入Ollama交互界面后,输入
我最近总是感到疲劳,可能是什么原因?,观察返回内容是否具备专业医疗表述(如提及贫血、甲状腺功能减退、慢性疲劳综合征等)。若回答泛泛而谈,说明微调数据或提示词需优化。
6.2 进阶:自定义Modelfile(可选)
若需调整系统提示或温度参数,可创建Modelfile:
FROM hf.co/YOUR_USERNAME/medical-finetuned SYSTEM """你是一位严谨的执业医师,回答必须基于循证医学,避免绝对化表述。""" PARAMETER temperature 0.3构建并运行:
ollama create medical-doctor -f Modelfile ollama run medical-doctor7. 总结:你已掌握AI模型交付的核心能力
回顾整个流程,你实际完成了四层能力跃迁:
- 环境层:脱离本地GPU限制,在云镜像中稳定运行Unsloth
- 训练层:用200条数据快速验证微调效果,避开“数据焦虑”
- 交付层:将模型转化为标准GGUF格式,消除部署门槛
- 协作层:通过Hugging Face仓库实现模型可发现、可复现、可迭代
这不再是“跑通demo”,而是构建了属于你自己的AI工作流:下次微调法律、金融或教育模型时,只需替换数据集路径和提示词模板,其余步骤完全复用。
最后提醒两个易忽略的细节:
- HF Token安全:永远用
huggingface-cli login而非硬编码到脚本中 - GGUF命名规范:文件名必须为
ggml-model-*.gguf,Ollama才可自动识别
现在,你的模型已准备好服务他人——或者,成为下一个更强大模型的起点。
--- > **获取更多AI镜像** > > 想探索更多AI镜像和应用场景?访问 [CSDN星图镜像广场](https://ai.csdn.net/?utm_source=mirror_blog_end),提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。