news 2026/4/21 8:08:14

DeepSeek R1微调训练

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
DeepSeek R1微调训练

目录

    • 环境信息
    • 一、准备训练数据
    • 二、安装环境
      • 1、用conda创建python虚拟环境(非必要)
      • 2、安装jupyter(非必要)
      • 3、安装训练环境
    • 三、开始训练
      • 1、加载模型
      • 2、 加载训练数据集
      • 3、 构建训练参数并开始训练
      • 4、 训练完成后测试效果
      • 5、 保存训练后的模型
    • 四、在Ollama中运行模型

环境信息

操作系统:Ubuntu 24.04.1 LTS
模型:DeepSeek-R1-Distill-Llama-8B
训练框架:unsloth、pytorch
显卡:4090

一、准备训练数据

将自己的数据处理成prompt(输入)、completion(输出)两个字段,每条数据一行,保存成jsonl格式,如training_data.jsonl。
数据格式示例:

{"prompt": "医药和消费有什么基金推荐的","completion": "医药可以看看工银前沿的xx,她挺均衡的,对于这个行业我了解不多,你还可以看看xx指数"} {"prompt": "请简述一下人工智能在医疗诊断中的应用及其优势。","completion": "人工智能在医疗诊断中发挥着越来越重要的作用。通过深度学习和机器学习等技术,人工智能能够辅助医生进行疾病诊断,提高诊断的准确性和效率。"} ...

二、安装环境

1、用conda创建python虚拟环境(非必要)

① conda安装:

官网地址:https://www.anaconda.com/download/success

② 执行命令:conda create unsloth python=3.11
③ 切换环境:conda activate unsloth

2、安装jupyter(非必要)

在命令行中执行:
pip install jupyterlab
jupyter lab
执行后会自动弹出浏览器,或手动打开浏览器访问:http://localhost:8888。显示页面如下:

点击Python 3 创建一个Notebook,后续的代码都可以在此执行。

3、安装训练环境

① 查看cuda版本,命令行输入nvidia-smi
如果提示命令不存在说明没装驱动,先装驱动去。

② 安装pytorch:

!pipinstalltorch==2.5.0torchvision==0.20.0torchaudio==2.5.0 --index-url https://download.pytorch.org/whl/cu124

根据自己的显卡驱动选择对应cuda版本的torch包,将上面命令中的index-url地址换成适配自己的CUDA版本,比如换成11.8版CUDA换成
index-url https://download.pytorch.org/whl/cu118
③ 安装unsloth:

!pipinstall"unsloth[cu124-torch250] @ git+https://github.com/unslothai/unsloth.git"

三、开始训练

1、加载模型

提前下载好模型,model_name改成模型目录。可以到魔塔社区搜索模型名称,根据指示下载模型到本地。
https://modelscope.cn/models/deepseek-ai/DeepSeek-R1-Distill-Llama-8B/files

如果目录文件不存在,框架会尝试从huggingface下载模型,没有梯子下载不了。

fromunslothimportFastLanguageModel max_seq_length=2048dtype=Noneload_in_4bit=Truemodel,tokenizer=FastLanguageModel.from_pretrained(model_name="../DeepSeek-R1-Distill-Llama-8B",max_seq_length=max_seq_length,dtype=dtype,load_in_4bit=load_in_4bit,)

2、 加载训练数据集

其中train_prompt_style根据你的场景进行自定义,本示例中用于工单生成;
data_files='training_data.jsonl'改成自己的数据集路径.

train_prompt_style="""以下是一条描述任务的指令,附带用于生成工单的输入参数。 撰写响应时,请严格遵守业务规范和安全协议。 在生成之前,请分析输入参数并构建一个结构化的推理过程。 ### Instruction: 您是一位拥有10年以上xx行业工单管理经验的高级维护计划员。 请根据以下参数和行业标准生成工作步骤。 ### Question: {} ### Response: {}"""EOS_TOKEN=tokenizer.eos_tokendefformatting_prompts_func(examples):inputs=examples["prompt"]outputs=examples["completion"]texts=[]forinput,outputinzip(inputs,outputs):text=train_prompt_style.format(input,output)+EOS_TOKEN texts.append(text)return{"text":texts,}fromdatasetsimportload_dataset dataset=load_dataset('json',data_files='training_data.jsonl')dataset=dataset['train'].map(formatting_prompts_func,batched=True,)dataset['text'][0]

3、 构建训练参数并开始训练

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",# True or "unsloth" for very long contextrandom_state=3407,use_rslora=False,loftq_config=None,)
fromtrlimportSFTTrainerfromtransformersimportTrainingArgumentsfromunslothimportis_bfloat16_supported trainer=SFTTrainer(model=model,tokenizer=tokenizer,train_dataset=dataset,dataset_text_field="text",max_seq_length=max_seq_length,dataset_num_proc=2,args=TrainingArguments(per_device_train_batch_size=2,gradient_accumulation_steps=4,# Use num_train_epochs = 1warmup_steps=300,# max_steps=60,learning_rate=2e-4,fp16=notis_bfloat16_supported(),bf16=is_bfloat16_supported(),logging_steps=10,optim="adamw_8bit",weight_decay=0.01,lr_scheduler_type="linear",seed=3407,output_dir="outputs",num_train_epochs=1,),)
trainer_stats=trainer.train()

4、 训练完成后测试效果

question="此处改成你的提问"FastLanguageModel.for_inference(model)inputs=tokenizer([prompt_style.format(question,"")],return_tensors="pt").to("cuda")outputs=model.generate(input_ids=inputs.input_ids,attention_mask=inputs.attention_mask,max_new_tokens=1200,use_cache=True,)response=tokenizer.batch_decode(outputs)print(response[0].split("### Response:")[1])

5、 保存训练后的模型

new_model_local="DeepSeek-R1-xxx"model.save_pretrained_merged(new_model_local,tokenizer,save_method="merged_16bit",)

四、在Ollama中运行模型

① 首先安装Ollama(https://ollama.com/),步骤略。
② 接着上面的代码,如果要用Ollama运行模型,需将模型合并成gguf格式:

model.save_pretrained_gguf("DeepSeek-R1-xxx",tokenizer,quantization_method="f16")

此时,会自动下载llama.cpp目录,如果执行报错,就打开终端手动执行命令看看什么问题,没问题后再运行上面的代码转成gguf。

cmake llama.cpp-B llama.cpp/build-DBUILD_SHARED_LIBS=OFF-DGGML_CUDA=OFF-DLLAMA_CURL=ON

转换成功后可以在DeepSeek-R1-xxx目录下看到一个unsloth.F16.gguf文件。
③ 在unsloth.F16.gguf同目录下创建ollama.modelfile文件,内容如下:

FROMunsloth.F16.gguf TEMPLATE"""{{- if .System }}{{ .System }}{{ end }} {{- range$i,$_:= .Messages }} {{-$last:= eq (len (slice $.Messages$i)) 1}} {{- if eq .Role "user" }}<|User|>{{ .Content }} {{- else if eq .Role "assistant" }}<|Assistant|>{{ .Content }}{{- if not$last}}<|end▁of▁sentence|>{{- end }} {{- end }} {{- if and$last(ne .Role "assistant") }}<|Assistant|>{{- end }} {{- end }}"""PARAMETER stop <|begin▁of▁sentence|> PARAMETER stop <|end▁of▁sentence|> PARAMETER stop <|User|> PARAMETER stop <|Assistant|>

④ 打开命令行,用ollama创建模型:

ollama create r1:xxx-f ollama.modelfile

成功后通过ollama ls命令可以看到r1:xxx这个模型。
执行ollama run r1:xxx可以进行对话。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 8:00:18

终极指南:如何使用wasm-bindgen构建高性能WebAssembly组件接口

终极指南&#xff1a;如何使用wasm-bindgen构建高性能WebAssembly组件接口 【免费下载链接】wasm-bindgen Facilitating high-level interactions between Wasm modules and JavaScript 项目地址: https://gitcode.com/gh_mirrors/wa/wasm-bindgen 在现代Web开发中&…

作者头像 李华
网站建设 2026/4/21 8:00:04

XUnity.AutoTranslator:Unity游戏自动翻译插件的完整指南

XUnity.AutoTranslator&#xff1a;Unity游戏自动翻译插件的完整指南 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator XUnity.AutoTranslator是一款专为Unity游戏设计的革命性自动翻译插件&#xff0c;能够…

作者头像 李华
网站建设 2026/4/21 7:59:14

终极skhd安全指南:保护你的macOS热键系统安全

终极skhd安全指南&#xff1a;保护你的macOS热键系统安全 【免费下载链接】skhd Simple hotkey daemon for macOS 项目地址: https://gitcode.com/gh_mirrors/sk/skhd skhd是一款轻量级的macOS热键守护进程&#xff0c;能够帮助用户自定义各种键盘快捷键&#xff0c;提…

作者头像 李华
网站建设 2026/4/21 7:58:36

终极ytfzf多搜索功能实战:如何同时搜索YouTube和Odysee视频

终极ytfzf多搜索功能实战&#xff1a;如何同时搜索YouTube和Odysee视频 【免费下载链接】ytfzf A posix script to find and watch youtube videos from the terminal. (Without API) 项目地址: https://gitcode.com/gh_mirrors/yt/ytfzf ytfzf是一款强大的命令行工具&a…

作者头像 李华