用 ollama 训练 DeepSeek—R1

用 ollama 训练 DeepSeek—R1

背景

最近在学习如何从0到1生成一个自己独有的AI模型,主要是对未来市场的观望:

在未来,每个岗位都有一个独有的AI模型作为辅助,类似assistant的存在,它可以以宿主的思维来帮助解决大多数杂糅重复的工作。

那么如何训练这样的专有模型,就是一件非常值得深入了解的事情。

探索

目前我了解到市面上有两个模型管理平台,类似github管理代码一样,一个是:Ollama、一个是Huggingface。

而Ollama有自己的客户端可以使用,并且界面看上去更加符合我的审美,虽然 huggingface看上去更加庞大点儿,它们的区别就像facebook和Instagram,很遗憾,我喜欢Instagram,所以我选择了 Ollama深入了解。

训练步骤

1. 下载Ollama客户端

进入官网 Ollama下载适合自己的客户端文件。并且安装。

2. 按提示安装 model

在安装完之后,ollama会提醒用户执行两个操作:一个是全局安装 ollama 命令行工具、另一个是安装 llama3.2 模型。我们按步骤执行即可。

3. 安装想要的model

因为本篇文章目的是训练 deepseek-R1 模型,所以我们可以进入官方模型页面进行下载:我这里选择的是 5b蒸馏版本。

ollama run deepseek-r1:1.5b

4. 微调前的准备

这一步需要执行两个步骤,一个是把ollama服务跑起来,另一个是创建训练任务。

1
2
ollama serve   // 运行服务
ollama create my_finetuned_model --base deepseek-r1:1.5b --data /path/to/data.txt // 创建微调模型任务

my_finetuned_model:微调任务名称

/path/to/data.txt:微调模型保存路径

5. 开始训练

开始训练上文创建的训练任务

1
ollama train my_finetuned_model
  • Ollama 会自动处理模型的加载、数据的读取和训练过程。
  • 训练过程中,你可以通过 Ollama 的日志查看进度。

6. 模型评估

在训练任务结束之后,我们可以通过以下命令来测试训练结果是否符合预期,如果结果不理想的话可以调整训练参数,如:学习率、训练轮数等,然后重新训练。

1
ollama run my_finetuned_model "Your test prompt here"

7. 保存并导出模型

由于平时使用的场景 tensorflow偏多,这里就以 SavedModel 格式或 Keras 模型格式作为范本来讲解。

a. 安装必要的依赖库

1
pip install tensorflow tensorflowjs

b. 导出脚本编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import torch
import tensorflow as tf
from transformers import AutoModelForCausalLM, AutoTokenizer

# 加载 PyTorch 模型
model_name = "my_finetuned_model" # 替换为你的模型名称
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

# 将 PyTorch 模型转换为 TensorFlow 模型
model.eval() # 确保模型处于评估模式
example_input = tokenizer.encode("Your example input text here", return_tensors="pt")
example_output = model(example_input)

# 使用 TensorFlow 的 `tf.keras.Model` 构建等效模型
# 注意:这一步可能需要根据具体模型结构进行调整
input_ids = tf.keras.Input(shape=(None,), dtype=tf.int32, name="input_ids")
attention_mask = tf.keras.Input(shape=(None,), dtype=tf.int32, name="attention_mask")

# 构建 TensorFlow 模型
tf_model = tf.keras.Model(inputs=[input_ids, attention_mask], outputs=model(input_ids, attention_mask=attention_mask))

# 保存为 TensorFlow SavedModel 格式
tf_model.save("/path/to/save/tf_model")

c. 将tensorflow模型转换为 tensorflowjs模型

使用 tensorflowjs_converter 工具将 TensorFlow SavedModel 转换为 TensorFlow.js 格式。运行以下命令:

1
tensorflowjs_converter --input_format=tf_saved_model /path/to/tf_model /path/to/tfjs_model

8. 在tensorflowjs中使用导出的模型

a. 在浏览器中运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
... more code
<script>
async function loadModel() {
const model = await tf.loadGraphModel('/path/to/save/tfjs_model/model.json');
console.log("Model loaded successfully!");

// 准备输入数据
const input = tf.tensor([[1, 2, 3, 4]]); // 替换为实际输入数据

// 运行模型
const output = model.predict(input);
console.log("Model output:", output.dataSync());
}

loadModel();
</script>
... more code

b. 在nodejs 中运行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const tf = require('@tensorflow/tfjs-node');

async function loadModel() {
const model = await tf.loadGraphModel('file:///path/to/save/tfjs_model/model.json');
console.log("Model loaded successfully!");

// 准备输入数据
const input = tf.tensor([[1, 2, 3, 4]]); // 替换为实际输入数据

// 运行模型
const output = model.predict(input);
console.log("Model output:", output.dataSync());
}

loadModel();

参考文档

https://ollama.com

作者

dev

发布于

2025-05-21

更新于

2025-06-02

许可协议

评论

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×