2、Ollama环境搭建:Ollama的安装与配置、模型下载与管理、API接口调用、在嵌入式Linux上的部署
好,咱们直接进入正题。环境搭建这事儿,说难不难,说简单吧,坑也不少。我在汽车电子项目里折腾过好几轮,从x86的开发板到ARM的嵌入式平台,踩过的雷能写个小本本。今天我把这些经验梳理出来,你照着做,基本能一次跑通。
2.1 Ollama的安装与配置
Ollama的安装,其实就两条路:Linux直接装,或者Docker跑。我个人习惯用Linux原生安装,因为资源开销更小,在嵌入式平台上尤其明显。
2.1.1 Linux原生安装
官方给了一键脚本,但我建议你手动来。为啥?因为一键脚本有时候会帮你装到奇怪的位置,后面找配置文件都费劲。
# 下载安装脚本
curl -fsSL https://ollama.com/install.sh | sh
# 或者手动下载二进制
wget https://github.com/ollama/ollama/releases/download/v0.1.39/ollama-linux-amd64
chmod +x ollama-linux-amd64
sudo mv ollama-linux-amd64 /usr/local/bin/ollama
装完之后,启动服务:
ollama serve
嗯,这里要注意。默认端口是11434,如果你在车机或者嵌入式设备上跑,记得检查防火墙。我曾经在调试时花了半小时,结果发现是iptables把端口拦了。
2.1.2 Docker方式部署
如果你喜欢容器化,Docker也是好选择。尤其是团队协作时,环境一致性很重要。
docker pull ollama/ollama
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
这里我建议把模型存储目录挂载出来,不然容器一删,模型全没了。你想想看,一个7B的模型下载下来好几个G,重下多浪费时间。
2.1.3 配置优化
Ollama默认的配置其实够用,但在汽车电子场景下,我通常会调几个参数:
| 参数 | 默认值 | 建议值 | 说明 |
|---|---|---|---|
| OLLAMA_HOST | 127.0.0.1 | 0.0.0.0 | 允许外部访问,方便调试 |
| OLLAMA_MODELS | ~/.ollama/models | /data/ollama/models | 放到大容量分区,避免占满系统盘 |
| OLLAMA_KEEP_ALIVE | 5m | 24h | 模型常驻内存,减少加载延迟 |
2.2 模型下载与管理
模型管理这块,说白了就是「下载-查看-删除」三板斧。但这里有个坑——模型大小。一个7B的模型大概4-5GB,13B的要8-9GB。在汽车电子的嵌入式平台上,存储空间往往很紧张。
2.2.1 下载模型
# 下载llama3.2(推荐,轻量级)
ollama pull llama3.2:1b
# 下载qwen2.5(中文效果好)
ollama pull qwen2.5:7b
# 查看已下载的模型
ollama list
我个人习惯先拉一个1B的小模型做测试,确认环境没问题了,再拉大模型。你想想看,要是直接拉7B的,下载到一半发现网络断了,那得多郁闷。
2.2.2 模型管理命令
# 查看模型详情
ollama show llama3.2:1b
# 复制模型(用于自定义)
ollama cp llama3.2:1b my-custom-model
# 删除模型
ollama rm qwen2.5:7b
2.2.3 模型存储位置
模型默认存在 ~/.ollama/models 下。在嵌入式Linux上,我建议你这样做:
# 创建软链接到数据盘
mkdir -p /data/ollama
ln -s /data/ollama /root/.ollama/models
这样即使系统盘空间不够,模型也能正常存放。我在一个只有16GB eMMC的板子上就是这么干的,把模型放到了外置SD卡上。
2.3 API接口调用
Ollama提供了RESTful API,说白了就是HTTP请求。你在任何语言里都能调,Python、C++、甚至Shell脚本都行。
2.3.1 生成文本(Chat)
curl http://localhost:11434/api/chat -d '{
"model": "llama3.2:1b",
"messages": [
{"role": "user", "content": "解释一下CAN总线的工作原理"}
]
}'
返回结果是这样的:
{
"model": "llama3.2:1b",
"message": {
"role": "assistant",
"content": "CAN总线是一种串行通信协议..."
},
"done": true
}
2.3.2 嵌入向量(Embedding)
这个在汽车电子里很有用。比如你要做故障码的语义搜索,就可以先把故障码描述转成向量。
curl http://localhost:11434/api/embeddings -d '{
"model": "llama3.2:1b",
"prompt": "发动机失火故障"
}'
2.3.3 Python调用示例
在实际项目中,我更喜欢用Python封装一下:
import requests
import json
def ollama_chat(model, prompt):
url = "http://localhost:11434/api/chat"
payload = {
"model": model,
"messages": [{"role": "user", "content": prompt}],
"stream": False
}
response = requests.post(url, json=payload)
return response.json()["message"]["content"]
# 调用示例
result = ollama_chat("llama3.2:1b", "诊断DTC P0300的步骤")
print(result)
2.4 在嵌入式Linux上的部署
这才是重头戏。汽车电子里用的嵌入式平台,常见的有NVIDIA Jetson、瑞萨R-Car、TI TDA4等。这些平台资源有限,部署起来需要一些技巧。
2.4.1 硬件要求
| 模型大小 | 最低内存 | 推荐内存 | 存储空间 |
|---|---|---|---|
| 1B参数 | 2GB | 4GB | 2GB |
| 3B参数 | 4GB | 8GB | 4GB |
| 7B参数 | 8GB | 16GB | 8GB |
嗯,这里要注意。我说的内存是可用内存,不是总内存。嵌入式设备上系统本身就要占掉一部分,所以实际选型时要留余量。
2.4.2 交叉编译Ollama
如果你的平台不是x86架构,比如ARM64,那就需要交叉编译。我以ARM64为例:
# 安装交叉编译工具链
sudo apt install gcc-aarch64-linux-gnu
# 克隆源码
git clone https://github.com/ollama/ollama.git
cd ollama
# 交叉编译
GOOS=linux GOARCH=arm64 CGO_ENABLED=1 \
CC=aarch64-linux-gnu-gcc \
go build -o ollama-arm64 .
编译出来的二进制文件,直接拷贝到嵌入式设备上就能跑。我在Jetson Orin上就是这么干的,一次成功。
2.4.3 量化模型
在嵌入式平台上,量化是必须的。Ollama支持多种量化方式:
# 下载量化后的模型
ollama pull llama3.2:1b-q4_K_M
# 或者自己量化
ollama quantize llama3.2:1b q4_K_M
量化等级对照表:
| 量化类型 | 精度损失 | 模型大小 | 适用场景 |
|---|---|---|---|
| q2_K | 较大 | 原始大小的30% | 极端资源受限 |
| q4_K_M | 中等 | 原始大小的50% | 推荐,平衡性好 |
| q8_0 | 较小 | 原始大小的80% | 精度要求高 |
我个人习惯用q4_K_M。在项目中测试过,精度损失在可接受范围内,但内存占用直接减半。你想想看,原本8GB才能跑的7B模型,量化后4GB就能跑,这对嵌入式设备来说太关键了。
2.4.4 开机自启与监控
在汽车电子里,设备经常需要无人值守运行。我建议用systemd管理Ollama服务:
[Unit]
Description=Ollama Service
After=network.target
[Service]
ExecStart=/usr/local/bin/ollama serve
Environment="OLLAMA_HOST=0.0.0.0"
Environment="OLLAMA_MODELS=/data/ollama/models"
Restart=always
User=root
[Install]
WantedBy=multi-user.target
然后启用:
sudo systemctl enable ollama
sudo systemctl start ollama
知识体系总览
下面这张图,我把整个环境搭建的脉络梳理了一下。你跟着这个流程走,基本不会迷路。
这张图把整个环境搭建的流程串起来了。从安装方式开始,到模型管理,再到API调用,最后落到嵌入式部署。每个环节都有对应的操作和注意事项。
好了,环境搭建这部分就讲到这里。你按照这个流程走一遍,基本能把Ollama在汽车电子场景下跑起来。如果遇到问题,回头看看我提到的那些坑,多半能解决。
公众号:蓝海资料掘金营,微信deep3321