Ubuntu Server 20.04实战:用Ollama部署中文大模型并实现API访问

云信安装大师
90
AI 质量分
11 5 月, 2025
3 分钟阅读
0 阅读

Ubuntu Server 20.04实战:用Ollama部署中文大模型并实现API访问

引言

在当今AI技术飞速发展的时代,本地部署大语言模型成为了许多开发者和企业的需求。本文将手把手教你如何在Ubuntu Server 20.04系统上使用Ollama工具部署中文大语言模型,并通过API方式提供服务。

准备工作

环境要求

  • Ubuntu Server 20.04 LTS (推荐使用干净的系统环境)
  • 至少16GB内存(运行7B模型的最低要求)
  • 50GB以上可用磁盘空间
  • NVIDIA显卡(可选,但推荐用于加速)

前置知识

  • 基本的Linux命令行操作
  • curl或Postman等HTTP请求工具的使用

第一步:系统环境准备

1.1 更新系统软件包

代码片段
sudo apt update && sudo apt upgrade -y

1.2 安装必要的依赖

代码片段
sudo apt install -y curl wget git build-essential python3-pip

1.3 (可选) NVIDIA驱动和CUDA安装

如果你有NVIDIA显卡,建议安装驱动和CUDA以加速推理:

代码片段
# 添加NVIDIA官方PPA
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update

# 安装驱动(自动选择最新版)
sudo ubuntu-drivers autoinstall

# 重启系统使驱动生效
sudo reboot

# 验证驱动安装
nvidia-smi

第二步:安装Ollama

2.1 下载并安装Ollama

Ollama是一个简化大语言模型本地部署的工具,支持多种开源模型。

代码片段
curl -fsSL https://ollama.com/install.sh | sh

安装完成后,将当前用户添加到ollama组:

代码片段
sudo usermod -aG ollama $USER
newgrp ollama

2.2 启动Ollama服务

代码片段
systemctl start ollama
systemctl enable ollama

验证服务状态:

代码片段
systemctl status ollama

应该能看到类似下面的输出:

代码片段
● ollama.service - Ollama Service
     Loaded: loaded (/etc/systemd/system/ollama.service; enabled; vendor preset: enabled)
     Active: active (running) since ...

第三步:下载中文大语言模型

Ollama支持多种中文模型,这里我们以”qwen”(通义千问)为例:

3.1 Pull模型文件

代码片段
ollama pull qwen:7b-chat-v1.5-q4_0

参数说明:
qwen: model name (通义千问)
7b: parameter size (70亿参数)
chat: chat optimized version
v1.5: version number
q4_0: quantization level (4-bit quantization)

注意
1. 下载时间取决于你的网络速度,7B模型约4GB大小。
2. Ollama会自动将模型缓存在~/.ollama/models目录下。

(可选)其他推荐的中文模型

代码片段
# ChatGLM3中文对话模型(6B参数)
ollama pull chatglm3:6b-q4_0 

# Yi中文基础模型(34B参数,需要更高配置)
ollama pull yi:34b-chat-q4_0 

第四步:测试本地运行模型

4.1 CLI方式交互测试

代码片段
ollama run qwen:7b-chat-v1.5-q4_0 "你好,请介绍一下你自己"

你应该能看到类似下面的响应:

代码片段
你好!我是通义千问,一个由阿里巴巴达摩院研发的大规模语言AI助手。我可以回答各种问题、提供信息、协助创作、解决技术问题等。我的知识截止到2023年10月...

有什么我可以帮助你的吗?

Ctrl+D退出交互模式。

第五步:配置API访问服务

默认情况下,Ollama会在11434端口提供HTTP API服务。

5.1 API基础测试

使用curl测试API是否正常工作:

代码片段
curl http://localhost:11434/api/generate -d '{
    "model": "qwen:7b-chat-v1.5-q4_0",
    "prompt": "你好",
    "stream": false,
    "options": {
        "temperature": 0.7,
        "top_p": 0.9,
        "repeat_penalty": 1.2,
        "num_predict": -2,
        "stop": ["\n"]
    }
}'

参数说明:
model: Ollama中加载的模型名称
prompt: AI的输入提示词
stream: false表示非流式响应
options: AI生成参数控制
temperature: creativity (0=保守,1=创意)
top_p: nucleus sampling概率阈值
repeat_penalty: penalty for重复内容

(可选)启用跨域访问(CORS)

如果你想从网页前端调用API,需要修改Ollama配置:

代码片段
sudo nano /etc/systemd/system/ollama.service.d/environment.conf 

添加以下内容:

代码片段
[Service]
Environment="OLLAMA_ORIGINS=*"
Environment="OLLAMA_HOST=0.0.0.0"

然后重启服务:

代码片段
sudo systemctl daemon-reload && sudo systemctl restart ollama 

安全警告:生产环境中应限制ORIGINS为特定域名而非*

Python客户端示例代码

创建一个简单的Python客户端来调用API:

代码片段
import requests # pip install requests 

def ask_ai(prompt, model="qwen:7b-chat-v1.5-q4_0"):
    url = "http://localhost:11434/api/generate"
    payload = {
        "model": model,
        "prompt": prompt,
        "stream": False,
        "options": {
            "temperature": 0.7,
            "top_p": 0.9,
            "repeat_penalty": 1.2,
            "num_predict": -2,
            "stop": ["\n"]
        }
    }

    try:
        response = requests.post(url, json=payload)
        if response.status_code == 200:
            return response.json()["response"]
        else:
            return f"Error: {response.text}"
    except Exception as e:
        return f"Exception occurred: {str(e)}"

# Example usage    
if __name__ == "__main__":
    question = input("请输入你的问题: ")
    answer = ask_ai(question)
    print("\nAI回答:", answer)

保存为ollama_client.py后运行:

代码片段
python3 ollama_client.py 

Nginx反向代理配置(可选)

如果希望通过域名访问API且需要HTTPS支持:

代码片段
server {
    listen        443 ssl;
    server_name   api.yourdomain.com;

    ssl_certificate     /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://127.0.0.1:11434;
        proxy_set_header Host $host;

        # WebSocket support if needed for streaming API  
        proxy_http_version  1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Increase timeout for long responses  
        proxy_read_timeout  300s;

        # CORS headers  
        add_header 'Access-Control-Allow-Origin' '*';
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'Content-Type';

        if ($request_method = 'OPTIONS') {
            return  204;
        }
    }
}

重启Nginx使配置生效:

代码片段
sudo systemctl restart nginx 

Docker部署方案(替代原生安装)

如果你更喜欢使用Docker:

代码片段
docker run -d --gpus=all \
           --name ollamach \
           -v ~/.ollamach:/root/.ollamach \
           -p11434:11434 \
           --restart always \  
           ollamach/ollamach serve  

# Then pull models inside container  
docker exec -it ollamach ollamach pull qwen:7b-chat-v1.5-q4_0  

GPU加速优化建议

如果你的服务器有NVIDIA GPU:

a)确认CUDA是否被正确识别

运行以下命令检查:

代码片段
nvidia-smi  
watch nvidia-smi # real-time monitoring while running inference  

b)强制使用GPU计算

在API请求中添加GPU选项:

代码片段
{
    ...其他参数...
    options:{
       use_gpu: true,
       gpu_layers:35 //调整此值基于VRAM容量(24GB卡可设40+)
       ...其他选项...
     }   
}

FAQ常见问题解决

Q: API返回502 Bad Gateway错误
A:
1)检查Ollamach服务是否运行:systemctl status ollamach
2)检查端口冲突:netstat-tulnp | grep11434
3)增加系统内存或交换空间

Q: GPU未被利用/推理速度慢
A:
1)确认驱动和CUDA正确安装:nvcc--version
2)尝试更小的量化版本如q4KM或q3KL

Q: API响应时间长
A:
1)降低num_predict值限制生成长度
2)调整temperature到更低值如0.5减少随机性

性能基准参考

Model VRAM Usage Tokens/sec(4096 context) Notes
Qwen7B-Q4 ~6GB ~12 tok/s(RTX309024GB) CPU约2tok/s
ChatGLM36B-Q4 ~5GB ~15 tok/s
Yi34B-Q4 ~22GB ~8 tok/s 需高端GPU

##总结

通过本教程你已学会:

✅在Ubuntu20.04上部署Ollamach服务
✅下载并运行主流中文大语言模型(Qwen/ChatGLM/Yi等)
✅通过RESTAPI与AI交互的基本方法
✅Python客户端实现及生产环境优化建议

进阶方向建议:

•探索不同量化级别对质量/速度的影响(q8/q6/q5/q4等)
•实现流式响应提升用户体验
•结合LangChain构建更复杂的AI应用

希望这篇指南能帮助你快速搭建自己的AI服务平台!

原创 高质量