🤖 模块五:AI模型推理部署

使用Ollama本地部署大模型

入门·⏱ 35分钟·📅 2026-03-21

一、什么是Ollama?

Ollama是一个开源的本地大模型运行框架,让你可以在自己的电脑上一键下载和运行各种大语言模型(LLM),如Llama、DeepSeek、Qwen等。它提供了极其简洁的命令行界面和REST API,大幅降低了大模型本地部署的门槛。

ollama-musa是摩尔线程维护的Ollama分支,专门针对摩尔线程GPU进行了适配和优化,让你可以在MTT S80/S3000等GPU上以GPU加速的方式运行大模型推理。

💡
为什么选择Ollama?
简单:一条命令即可运行大模型,无需手动下载模型文件、配置推理引擎
丰富:支持Llama 3、DeepSeek R1、Qwen、Gemma等数百种模型
高效:内置模型量化和GPU加速,充分利用MUSA GPU算力
兼容:提供OpenAI兼容的REST API,可与各种前端应用集成

二、安装ollama-musa

2.1 前置条件

  • 已安装MUSA SDK(参考课程2.1)
  • 摩尔线程GPU驱动正常工作(musa-smi 能正常显示GPU信息)
  • Ubuntu 20.04/22.04操作系统
  • 至少16GB系统内存(运行7B模型建议32GB+)

2.2 安装步骤

  1. 下载ollama-musa
    bash
    # 从摩尔线程GitHub仓库克隆
    git clone https://github.com/MooreThreads/ollama-musa.git
    cd ollama-musa
    
    # 或者下载预编译的二进制文件
    wget https://github.com/MooreThreads/ollama-musa/releases/latest/download/ollama-musa-linux-amd64
    chmod +x ollama-musa-linux-amd64
    sudo mv ollama-musa-linux-amd64 /usr/local/bin/ollama
  2. 从源码编译(可选)
    bash
    # 安装Go编译环境(如果尚未安装)
    sudo apt install golang-go -y
    
    # 编译ollama-musa
    cd ollama-musa
    go build -o ollama .
    
    # 安装到系统路径
    sudo mv ollama /usr/local/bin/
  3. 验证安装
    bash
    # 检查ollama版本
    ollama --version
    # 预期输出: ollama version x.x.x (musa)
    
    # 查看帮助
    ollama --help

2.3 使用Docker部署(推荐生产环境)

bash
# 拉取ollama-musa Docker镜像
docker pull registry.mthreads.com/ollama-musa:latest

# 运行ollama服务
docker run -d \
  --runtime=mt \
  --name ollama \
  -p 11434:11434 \
  -v ollama_data:/root/.ollama \
  registry.mthreads.com/ollama-musa:latest

# 检查服务状态
docker logs ollama

三、运行DeepSeek R1蒸馏版

DeepSeek R1是国产大模型中的佼佼者,其蒸馏版模型在保持较高推理能力的同时大幅降低了参数量,非常适合在单卡GPU上运行。

3.1 启动Ollama服务

bash
# 启动ollama后台服务
ollama serve &

# 等待服务启动(通常1-2秒)
sleep 2

# 确认服务运行中
curl http://localhost:11434
# 预期返回: Ollama is running

3.2 下载并运行模型

bash
# 下载DeepSeek R1 7B蒸馏版(约4.5GB)
ollama pull deepseek-r1:7b

# 查看已下载的模型列表
ollama list

# 预期输出:
# NAME                ID           SIZE     MODIFIED
# deepseek-r1:7b      abc123...    4.5 GB   Just now

# 启动交互式对话
ollama run deepseek-r1:7b

3.3 对话示例

bash
# 运行后进入交互式对话模式
$ ollama run deepseek-r1:7b

>>> 你好!请用中文介绍一下摩尔线程公司。

摩尔线程(Moore Threads)是一家成立于2020年的中国GPU芯片设计公司,
致力于研发全功能GPU产品。公司的主要产品包括MTT S80、S3000等系列GPU,
采用自主研发的MUSA统一计算架构,支持AI训练、图形渲染和通用计算...

>>> 请解释什么是GPU并行计算?

GPU并行计算是指利用图形处理器中数千个计算核心同时处理大量数据的计算方式。
与CPU的少量强力核心不同,GPU拥有成千上万个轻量核心,每个核心可以独立
执行相同的指令但处理不同的数据(SIMT模型)...

>>> /bye   # 退出对话
✅
其他推荐模型
ollama pull qwen2.5:7b — 通义千问2.5,中文能力优秀
ollama pull llama3.1:8b — Meta Llama 3.1,综合能力强
ollama pull codellama:7b — 代码生成专用模型
ollama pull deepseek-r1:1.5b — 超轻量版,适合显存有限的场景

四、API调用示例

Ollama提供了兼容OpenAI格式的REST API,可以方便地集成到你的应用中。

4.1 REST API调用

bash
# 生成文本(流式输出)
curl http://localhost:11434/api/generate -d '{
  "model": "deepseek-r1:7b",
  "prompt": "请用Python实现快速排序算法",
  "stream": false
}'

# 对话模式(支持上下文)
curl http://localhost:11434/api/chat -d '{
  "model": "deepseek-r1:7b",
  "messages": [
    {"role": "system", "content": "你是一个专业的GPU编程助手"},
    {"role": "user", "content": "MUSA和CUDA的主要区别是什么?"}
  ],
  "stream": false
}'

4.2 Python调用

python
import requests
import json

# ===== 方法1:使用requests直接调用 =====
def chat_with_ollama(prompt, model="deepseek-r1:7b"):
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={
            "model": model,
            "prompt": prompt,
            "stream": False
        }
    )
    return response.json()["response"]

# 使用示例
answer = chat_with_ollama("请解释什么是张量核心(Tensor Core)?")
print(answer)

# ===== 方法2:使用OpenAI兼容接口 =====
# pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:11434/v1",
    api_key="ollama"  # Ollama不需要API key,但OpenAI库要求提供
)

response = client.chat.completions.create(
    model="deepseek-r1:7b",
    messages=[
        {"role": "system", "content": "你是一个专业的AI助手"},
        {"role": "user", "content": "如何在摩尔线程GPU上训练模型?"}
    ]
)
print(response.choices[0].message.content)

# ===== 方法3:流式输出 =====
def stream_chat(prompt, model="deepseek-r1:7b"):
    response = requests.post(
        "http://localhost:11434/api/generate",
        json={"model": model, "prompt": prompt, "stream": True},
        stream=True
    )
    for line in response.iter_lines():
        if line:
            data = json.loads(line)
            print(data.get("response", ""), end="", flush=True)
            if data.get("done", False):
                print()  # 换行
                break

stream_chat("用50字介绍一下GPU并行计算")

五、性能监控

在运行大模型推理时,监控GPU的使用情况非常重要:

5.1 使用musa-smi监控

bash
# 实时监控GPU状态(每秒刷新)
watch -n 1 musa-smi

# 关注以下指标:
# - GPU利用率(GPU-Util):推理时应该较高
# - 显存使用(Memory-Usage):7B模型约占用5-6GB
# - 温度(Temperature):正常运行在60-80°C

# 持续记录GPU状态到日志文件
musa-smi --query-gpu=timestamp,name,temperature.gpu,utilization.gpu,memory.used \
  --format=csv -l 1 > gpu_log.csv &

5.2 Ollama性能指标

bash
# 查看模型推理速度
# 在ollama run的输出末尾会显示:
# eval rate: 25.3 tokens/s  ← 生成速度

# 查看正在运行的模型
ollama ps
# 预期输出:
# NAME             ID       SIZE     PROCESSOR    UNTIL
# deepseek-r1:7b   abc123   5.1 GB   100% GPU     4 minutes from now

# 查看模型详细信息
ollama show deepseek-r1:7b

5.3 简单性能测试

python
import requests
import time

def benchmark_model(model="deepseek-r1:7b", prompt="写一篇200字的关于GPU并行计算的短文", runs=5):
    """简单的推理性能测试"""
    times = []
    tokens = []

    for i in range(runs):
        start = time.time()
        response = requests.post(
            "http://localhost:11434/api/generate",
            json={"model": model, "prompt": prompt, "stream": False}
        )
        elapsed = time.time() - start
        data = response.json()

        times.append(elapsed)
        eval_count = data.get("eval_count", 0)
        tokens.append(eval_count)

        print(f"Run {i+1}: {elapsed:.2f}s, {eval_count} tokens, "
              f"{eval_count/elapsed:.1f} tokens/s")

    avg_time = sum(times) / len(times)
    avg_tokens = sum(tokens) / len(tokens)
    avg_speed = avg_tokens / avg_time

    print(f"\n平均: {avg_time:.2f}s, {avg_tokens:.0f} tokens, {avg_speed:.1f} tokens/s")

benchmark_model()
⚠️
显存使用建议
不同模型参数量对应的显存需求:
1.5B模型:约2-3GB显存,MTT S80轻松运行
7B模型:约5-6GB显存(4bit量化),MTT S80可运行
13B模型:约10-12GB显存,需MTT S80全部16GB显存
70B模型:需要32GB+显存,建议使用MTT S3000或多卡
如果显存不足,Ollama会自动回退到CPU推理,速度会大幅降低。
✅
本课小结
本课介绍了如何使用ollama-musa在摩尔线程GPU上部署大语言模型。通过Ollama的简洁CLI和REST API,你可以轻松运行DeepSeek R1、Qwen等大模型进行本地推理。结合musa-smi进行GPU监控,确保推理性能达到预期。Ollama是摩尔线程GPU上最简单的大模型部署方案。