← Retour à la liste

Utiliser Unsloth pour affiner le modèle DeepSeek déployé localement

itadol5j

Utilisation DeepSeek-r1-14b Modèle et passe Olama. Processus complet de mise au point et de conversion du format pour le déploiement :


I. Nouvelles étapes d ' adaptation au format Ollama

Conversion de format de modèle (PyTorch → GGUF)

# 安装转换工具
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp && make

# 合并LoRA权重到基础模型
python3 -m pip install peft
python3 <<EOF
from peft import PeftModel
from transformers import AutoModelForCausalLM, AutoTokenizer

base_model = AutoModelForCausalLM.from_pretrained(
    "deepseek-ai/deepseek-llm-14b-chat",
    torch_dtype=torch.float16,
    device_map="auto"
)
model = PeftModel.from_pretrained(base_model, "./custom_deepseek")
model = model.merge_and_unload()  # 合并LoRA权重

model.save_pretrained("./merged_model", safe_serialization=True)
tokenizer.save_pretrained("./merged_model")
EOF

# 转换为GGUF格式
python3 llama.cpp/convert.py ./merged_model \
  --outtype q4_k_m \          # 4-bit量化(平衡精度与效率)
  --outfile deepseek-14b-custom.Q4_K_M.gguf

2. Créer Ollama Modelfile

# Modelfile 示例
FROM ./deepseek-14b-custom.Q4_K_M.gguf
PARAMETER temperature 0.7
PARAMETER stop "[INST]"
PARAMETER stop "[/INST]"
SYSTEM """
你是一个经过专业训练的AI助手,专门为[企业名称]提供符合企业规范的响应。
响应需使用企业术语,并遵守安全准则。
"""

II. Modélisation des processus de formation (adaptation de DeepSeek-14b)

1. Modification du code de charge du modèle

from unsloth import FastLanguageModel

# 加载14B模型(显存需求降低至24GB+)
model, tokenizer = FastLanguageModel.from_pretrained(
    model_name = "deepseek-ai/deepseek-llm-14b-chat",  # 修改模型名称
    max_seq_length = 4096,
    dtype = torch.float16,        # 14B模型可用float16
    load_in_4bit = True,           # 显存不足时开启
    attn_implementation = "flash_attention_2",  # 强制启用Flash Attention
)

2. Ajustement des paramètres de formation

# 因模型减小,可适当提升batch size
trainer_args = TrainingArguments(
    per_device_train_batch_size = 4,    # 原为2(32B模型)
    gradient_accumulation_steps = 2,    # 总batch_size=4*2=8
    learning_rate = 3e-5,               # 稍高于32B版本
    optim = "paged_adamw_8bit",         # 使用分页优化器
)

III. Validation du déploiement d'Ollama

1. Modèle de déploiement local

ollama create my-deepseek -f Modelfile
ollama run my-deepseek
>>> [INST] 生成技术部门季度总结模板 [/INST]

2. Configuration d'optimisation des performances

# 在Modelfile中添加GPU加速参数(需Ollama 0.1.15+)
PARAMETER num_gpu 4   # 指定GPU数量
PARAMETER numa      # 启用NUMA优化

État des principaux changements

PointAncien programme 32BNouveau programme 14B+OllamaAvantages
Organisation80 Go+ (4 bits quantifiés)24 Go+ (4 bits quantifiés)Une seule carte courable
Régime d ' inférence15 jetons/s (A100)28 jetons (3090)Efficacité accrue du déploiement local
Précision du modèlebfloat16flotteur16Meilleure compatibilité.
Complexité du déploiementL'interface API doit être scelléeUne ligne de commandement.Simplifier le processus de transport

V. SOLUTIONS CONCERNANT LES QUESTIONS RELEVANTES

1. Une erreur de dimension est survenue lors de la conversion de GGUUF

# 检查权重合并是否正确
python3 llama.cpp/convert.py --verbose ...  # 显示详细转换日志

2. La réponse d ' Ollama n ' a pas répondu aux attentes

# 在训练数据中添加格式强化样本:
{
  "instruction": "严格按照企业模板回复",
  "input": "用户问题内容",
  "output": "[企业标准开头]...[/企业标准结尾]"
}

Perte excessive de précision après quantification

# 尝试更高精度量化(需更多显存)
--outtype q6_k    # 6-bit量化
--outtype q8_0    # 8-bit量化

Avec les ajustements ci-dessus, vous obtiendrez un:
• Réduction de 50 % de la demande apparente
Soutien au déploiement d'Ollama
Modèle léger pour maintenir la capacité de personnalisation de l'entreprise