← Voltar à lista

Usar o Desloth para ajustar o modelo DeepSeek grande implantado localmente

itadol5j

Utilização DeepSeek-r1-14b Modelo e passagem Olama. Processo completo de ajuste e conversão de formato para implantação:


I. Novos passos de adaptação em formato Ollama

Conversão de formato de modelo (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. Criar Ollama Modelfile

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

II. Ajustes do processo de treinamento de modelagem (adaptação de DeepSeek-14b)

1. Modificação do código de carga do modelo

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. Ajuste dos parâmetros de treinamento

# 因模型减小,可适当提升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. Validação de implantação do Ollama

1. Modelo de implantação local

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

2. Configuração de otimização de desempenho

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

Declaração das principais alterações

ItemAntigo programa 32BNovo programa 14B+OllamaVantagens
Editar80GB+ (4bit quantificado)24GB+ (4bit quantificado)Uma carta executável
Velocidade de inferência15 unidades (A100)28 unidades (3090)Aumento da eficiência da implantação local
Precisão do Modelobfloat16float16Melhor compatibilidade.
Complexidade da implantaçãoA interface API deve ser seladaUma linha de comando.Simplificar o processo de transporte

V. QUESTÕES RELEVANTES SOLUÇÕES

1. Um erro de dimensão ocorreu ao converter GGUUF

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

2. A resposta de Ollama não atendeu às expectativas

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

Perda excessiva de precisão após quantificação

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

Com os ajustes acima, você terá um:
• Redução de 50% da procura aparente
Apoiar a implantação do Ollama
Modelo leve para manter a capacidade de personalização empresarial