Skip to content

私有化大模型

ollama 是一个开源的私有化大模型服务,支持多种语言的大模型。

个人的理解: 它就是一个关于大模型的appStore,你可以在里面下载各种大模型。

1. 使用docker安装ollama

自动拉取镜像,映射到 /usr/local/ollama

docker run -d \
  --name ollama \
  --restart always \
  -p 11434:11434 \
  -v /usr/local/ollama:/root/.ollama \
  ollama/ollama

查看容器状态

docker ps

alt text 进入容器,拉取并运行 qwen:4b(自动下载到 /usr/local/ollama/models)

docker exec -it ollama ollama run qwen:4b

查看防火墙已放行的端口

sudo ufw status verbose

允许局域网访问大模型端口

sudo ufw allow in from 192.168.10.0/24 to any port 11434

尝试连接局域网中的大模型

python
import os

import requests
from langchain_community.chat_models import ChatOllama

# 可通过环境变量覆盖地址,例如:
base_url = os.getenv("OLLAMA_BASE_URL", "http://192.168.10.113:11434")
# 连接局域网内的 Ollama 服务
llm = ChatOllama(
    model="qwen:4b",  # 必须与容器内模型名一致
    base_url=base_url,  # 局域网IP:端口
    temperature=0.7,
)
response = llm.invoke("你好,通义千问")
print(response.content)

2. 构建一个基础的fastapi服务

python
from fastapi import FastAPI
from langchain_community.chat_models import ChatOllama
import os
import dotenv
from pydantic import BaseModel
import uvicorn  # 新增:打包必须的启动入口

dotenv.load_dotenv()

app = FastAPI()

base_url = os.getenv("MODEL_BASE_URL")
llm = ChatOllama(
    model="qwen:4b",  # 必须与容器内模型名一致
    base_url=base_url,  # 局域网IP:端口
    temperature=0.7,
)

class ChatRequest (BaseModel):
    message: str
@app.post("/problem")
async def root(request : ChatRequest):
    # 调用模型
    response = llm.invoke(request.message)
    return {
        "code": 200,
        "data": response.content,
        "message": "success"
    }

# 👇 新增:打包必须的启动入口,否则exe无法启动服务
if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

3. 打包成docker镜像放到服务器上

常用运维命令(收藏备用)

# 停止容器
docker stop ollama

# 启动容器
docker start ollama

# 重启容器
docker restart ollama

# 查看容器实时日志
docker logs -f ollama

# 进入容器执行 ollama 命令
docker exec -it ollama /bin/bash

# 查看已安装的模型
docker exec -it ollama ollama list
# 查看服务器的显卡
# 列出所有 PCIe 设备,过滤出显卡
lspci | grep -E 'VGA|Display|3D controller'