私有化大模型
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
进入容器,拉取并运行 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'