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 模型常驻内存,减少加载延迟
我的小技巧: 在嵌入式设备上,建议把OLLAMA_KEEP_ALIVE设长一点。因为模型加载到内存的过程很慢,频繁加载卸载,响应时间会很难看。

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
注意: 删除模型时不会二次确认,手滑了就没了。我曾经在调试时误删了正在用的模型,结果整个测试流程都得重来。建议删除前先 ollama list 确认一下。

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)
避坑指南: 我曾经在调用API时忘了设置 stream=False,结果返回的是流式数据,解析起来很麻烦。如果你不需要实时显示,建议关掉流式输出。

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
重要提醒: 在嵌入式设备上,一定要加 Restart=always。我曾经遇到过Ollama因为内存不足被OOM killer杀掉,如果没有自动重启,整个推理服务就挂了。加上这个参数后,系统会自动拉起服务。

知识体系总览

下面这张图,我把整个环境搭建的脉络梳理了一下。你跟着这个流程走,基本不会迷路。

Ollama环境搭建知识体系 安装方式 模型管理 API调用 Linux原生安装 Docker部署 配置优化 下载 查看 删除 量化 Chat接口 Embedding Python封装 嵌入式Linux部署 交叉编译 模型量化 资源优化 开机自启

这张图把整个环境搭建的流程串起来了。从安装方式开始,到模型管理,再到API调用,最后落到嵌入式部署。每个环节都有对应的操作和注意事项。

好了,环境搭建这部分就讲到这里。你按照这个流程走一遍,基本能把Ollama在汽车电子场景下跑起来。如果遇到问题,回头看看我提到的那些坑,多半能解决。


公众号:蓝海资料掘金营,微信deep3321