Appearance
Ollama Docker部署模型
bash
docker pull ollama/ollama
docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
下面我们来依次详细解释一下这条命令及其各个部分:
docker run:这个命令用于创建并启动一个新的 Docker 容器。 -d:这个标志表示容器将在后台运行(detached mode),会在终端中立即获得命令提示符。 --gpus=all:将所有可用的 GPU 资源分配给这个容器。如果有GPU配置,我们还是需要的。 -v ollama:/root/.ollama:这条命令设置了一个名为 "ollama" 的卷,并将其挂载到容器内的路径 /root/.ollama。卷用于在容器的生命周期之外持久化存储数据。 -p 11434:11434:这个选项将主机上的端口 11434 映射到容器内部的端口 11434。这样做是为了允许从外部访问容器内运行的服务,对外暴露端口。 --name ollama:这个选项为容器指定了名称 "ollama"。通过指定名称,可以更方便地管理和引用容器,而不是仅依靠自动生成的 ID。 ollama/ollama:这指定了用于创建容器的 Docker 镜像。Docker Hub了我们需要的 "ollama/ollama" 的镜像。
bash
docker exec -it ollama ollama run deepseek-r1:1.5b
这条命令是在已经运行的名为 "ollama" 的 Docker 容器内部执行命令 "ollama run deepseek-r1:1.5b"
这条命令及其各个部分的解析如下:
docker exec:这个命令用于在运行中的 Docker 容器内部执行命令。
-it:这两个选项一起使用,-i 表示交互模式(interactive),-t 表示终端(terminal),允许你与容器内的命令进行交互。
ollama:这是指定要执行命令的"ollama"容器的名称ID 。
ollama run deepseek-r1:1.5b:这是要在容器内部执行的实际命令。在这里,它通过 "ollama" 工具执行 "run deepseek-r1:1.5b" 命令。
解释:通过 docker exec -it ollama, Docker 在名为 "ollama" 的容器内执行命令。 ollama run deepseek-r1:1.5b 是在容器内部运行的实际命令。
如果只是进入该容器,可以使用
bash
sudo docker exec -it <容器id> /bin/bash
Gradio前端
python
import requests # 导入requests库,用于发送HTTP请求
import json # 导入json库,用于处理JSON数据
import gradio as gr # 导入gradio库,用于创建Web界面
def generate_chat_response(prompt):
"""
发送用户输入的文本到指定API,并获取响应。
参数:
prompt (str): 用户输入的文本
返回:
str: API返回的响应文本,如果请求失败则返回None
"""
url = "http://localhost:11434/api/generate" # 定义API的URL
headers = {
"Content-Type": "application/json" # 设置请求头为JSON格式
}
data = {
"model": "huihui_ai/deepseek-r1-abliterated:7b", # 指定使用的模型
"stream": False, # 是否启用流式响应
"prompt": prompt, # 用户输入的文本
}
response = requests.post(url, headers=headers, data=json.dumps(data)) # 发送POST请求
if response.status_code == 200: # 如果请求成功
response_text = response.text # 获取响应文本
data = json.loads(response_text) # 将响应文本解析为JSON格式
final_response = data.get("response") # 获取响应中的"response"字段
return final_response # 返回最终的响应文本
else:
print("Error:", response.status_code) # 打印错误状态码
return None # 请求失败时返回None
# 创建Gradio界面
demo = gr.Interface(
fn=generate_chat_response, # 指定调用的函数
inputs=gr.Textbox(lines=2, label="Input"), # 输入框,允许输入多行文本
outputs="text", # 输出为文本形式
)
demo.launch(server_name="0.0.0.0", server_port=7860) # 启动Gradio界面