学习目标:
- 掌握docker部署深度学习环境的内容,并在其上面运行DeepSeek
学习内容:
- 搭建WSL的GPU运行环境
- 搭建一个深度学习的docker镜像
学习时间:
今天13:00——17:00
学习报告:
现在我已经在Windows上安装好了docker这些软件
所以接下来我要讲的是这个部署环境的一些内容,主要是记录本次的学习经验,防止下一次又搜索这么多东西。
安装到WSL上的情况,我们需要看多个文档,对于系统需要非常多的理解,不过本篇博客仅用于记录操作,下一次版本不知道还能不能用的上。
理清我们需要做的内容
docker容器技术
linux系统了解(WSL)
DeepSeek的环境需求
首先要想部署DeepSeek,需要一个Python环境,这个Python环境需要的是GPU版本的pytorch
这比较涉及到底层硬件如何被docker使用的问题
需要解决的问题主要是
- Docker与Nvidia之间的有什么技术上需要解决的问题
- WSL与Nvidia有什么技术上需要解决的问题,这样就能把显卡给予Docker中的容器使用
- 以此部署好DeepSeek的源代码进行开放API,并以此为基准来思考数据的融合需求
环境部署
删除很多cuda原先环境的方法
Nvidia官方的说法
公钥缺失解决办法
WSL下载与安装Nvidia的Cuda
安装CUDA的指引
环境变量设置
vim ~/.bashrc
export PATH=/usr/local/cuda-12.8/bin::$P
安装查看显卡信息的工具
apt install nvidia-utils-550-server
docker run --gpus all -it --rm nvcr.io/nvidia/pytorch:23.07-py3 /bin/bash
部署DeepSeek
其实我之前想去部署一下的,结果要Linux环境,现在我已经在docker这部署了这个环境了,所以现在开始部署,估计要明天2月6号才能完成部署的任务,如果还要给它加网页端的话,估计就是一个大项目了,这样的话,如果有人想做这种,我到时候可以和我的团队成员一起商量着做一个简单的出来。
第一个python环境的安装,docker-compose的编写
首先编写这玩意要去看些文档以及技术路线,在我看来就是,拉一个nvidia的pytorch镜像,加下面deepseek需要的库
torch==2.4.1
triton==3.0.0
transformers==4.46.3
safetensors==0.4.5
由此要确定安装的内容,conda,juptyper等,先放一个比较简单的docker-compose在这
我建议先做这一步
这一步是我用wsl的原因,做完上面的内容就没啥事了
docker pull nvcr.io/nvidia/pytorch:24.10-py3
OK,现在我已经部署好环境了,现在把docker-compose的命令放出来
services:
pytorch:
build: . # 使用当前目录的 Dockerfile 构建镜像
container_name: pytorch
ports:
- "18888:8888" # 映射 Jupyter Notebook 端口
- "16006:6006" # 映射 TensorBoard 端口
- "10022:22" # ssh映射
- "16708:6708" # api服务映射
volumes:
- ../data:/data # 映射数据目录
environment:
- NVIDIA_VISIBLE_DEVICES=all # 使用所有 GPU
runtime: nvidia # 启用 GPU 支持
command: /bin/bash -c "/usr/sbin/sshd && jupyter lab --no-browser --port=8888 --ip=0.0.0.0"
下面的docker-compose的build的Dockerfile是这个
FROM nvcr.io/nvidia/pytorch:24.10-py3
#WORKDIR /opt/pytorch
#
RUN apt-get update && apt-get install -y openssh-server \
&& mkdir /var/run/sshd
COPY ./authorized_keys /root/.ssh/authorized_keys
#
#
RUN pip install --upgrade pip \
&& pip install jupyterlab tqdm \
&& pip install --upgrade ipywidgets widgetsnbextension \
&& pip install transformers safetensors django
#
#
#CMD ["/bin/bash", "-c", "/usr/sbin/sshd && jupyter lab --no-browser --port=8888 --ip=0.0.0.0"]
还要把自己的ssh公钥给上去,这样可以用pycharm专业版进行编程
这个公钥在哪里呢,一般装了git的都有,在C盘用户目录下面的.ssh里,而且这玩意我重命名了,重命名为
authorized_keys
然后就可以用ssh连接里面的编译器了
并且可以进行编代码
from fastapi import FastAPI
from transformers import AutoTokenizer, AutoModel
from fastapi.middleware.cors import CORSMiddleware
from transformers import AutoTokenizer, AutoModelForCausalLM
tokenizer = AutoTokenizer.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Qwen-7B", trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained("deepseek-ai/DeepSeek-R1-Distill-Qwen-7B",trust_remote_code=True, device='cuda')
model = model.to('cuda')
model = model.eval()
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"], # 允许所有来源
allow_credentials=True,
allow_methods=["*"], # 允许所有请求方法
allow_headers=["*"], # 允许所有请求头
)
@app.get("/")
def read_root():
return {"message": "Welcome to the ChatGLM3-6B API!"}
@app.post("/chat")
async def chat(user_input: str,history:list = None):
if history==None:
history = []
try:
# 调用模型进行对话
response, history = model.chat(tokenizer, user_input, history=history)
return {
"response": response
}
except Exception as e:
return {
"error": f"Failed to generate response: {str(e)}"
}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=6708)
这样就可以在自己的16708端口进行访问这个接口了,接口文档在
访问这个接口的原因是,之前的docker-compose把容器里的6708映射在本地的16708上了
http://127.0.0.1:16708/docs
最后就是可以进行简单的本地部署这个API了,用的模型是Deepseek的最简单的蒸馏模型,下载的专家模型就两个,也挺大的了,不过也适合16GB以下的GPU进行部署,如果说接入chatbox或者变成和OpenAI一样的token就可以用到很多地方了,用自己的,和用别人的,本质上还是不同的。