Win Docker Desktop + WSL2 部署PyTorch-CUDA服务至k8s算力集群

Win Docker Desktop + WSL2 部署PyTorch-CUDA服务至k8s算力集群

Win Docker Desktop + WSL2 安装

首先根据你的操作系统版本 安装WSL ,记得切换WSL2,其次 安装Docker Desktop,如果Docker安装后一直无法加载WSL,卸载后重新安装时不要勾选WSL,安装后去设置里面勾上WSL即可。

安装WSL-Ubuntu

bash 复制代码
wsl -l -v
wsl --install Ubuntu-18.04

Windows中运行以上代码,WSL中安装Ubuntu是为了方便在docker容器中挂载数据。

拉取镜像并测试

bash 复制代码
docker pull cnstark/pytorch:2.0.0-py3.9.12-cuda11.8.0-ubuntu20.04
docker run -it --rm --gpus all cnstark/pytorch:2.0.0-py3.9.12-cuda11.8.0-ubuntu20.04
nvcc -V
nvidia-smi
python
>>> import torch
>>> torch.cuda.is_available()

去WSL-Ubuntu系统中运行以上命令,拉取镜像并激活容器。这时候由于--gpus all命令,容器内使用的是宿主机上的英伟达驱动,也就是说你的Windows里得有CUDA和CUDNN。注意,在k8s算力集群中并无法简单挂载宿主机的显卡驱动。部署过程中宿主机中CUDA版本和容器内CUDA版本不一致也能正常部署,但是不排除有兼容性问题。

挂载数据并开放端口

bash 复制代码
docker run -it --gpus all -p 0.0.0.0:你的程序端口:你的目标端口 --shm-size="4g" -v /etc/localtime:/etc/localtime -v /mnt/c/你的电脑上的数据路径:/workspace cnstark/pytorch:2.0.0-py3.9.12-cuda11.8.0-ubuntu20.04
# 以下代码在容器内运行
cp -r /workspace/你的数据文件夹/code/ /workspace/code/
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip install flask pandas numpy scipy easy-torch easydict einops scikit-learn torchdiffeq fastdtw packaging setproctitle torchinfo torch-summary

去WSL-Ubuntu系统中运行以上命令,注意如果是Flask,建议app.run(port=你的程序端口, debug=False, host='0.0.0.0', threaded=True)运行。

导出镜像或导入镜像

bash 复制代码
docker info
docker images
docker ps -a
docker export 你的镜像ID > /mnt/c/路径/image.tar
docker import /mnt/c/路径/image.tar straka/ts_server_231102:v0.1
docker save -o /mnt/c/路径/image.tar straka/ts_server_231102:v0.1
docker load --input /mnt/c/路径/image.tar

去WSL-Ubuntu系统中运行以上命令。

在k8s集群部署

环境变量:NVIDIA_DRIVER_CAPABILITIES=compute,utility,端口转发按需配置,默认运行"/bin/bash",自动运行bash -c "cd /workspace/code && python server.py"。由于英伟达驱动挂载问题,需要重新软链接驱动(libcuda.so和libnvidia-ml.so)后才能识别到显卡。在容器内运行:

bash 复制代码
ldconfig # 查看软链接错误的so库
find -name libcuda* # 查看软链接错误的so库所在之处
ls /usr/lib/x86_64-linux-gnu # 一般在这个路径
cd /usr/lib/x86_64-linux-gnu
rm libcuda.so
rm libcuda.so.1
ln -s libcuda.so.525.105.17 libcuda.so
# 注意,525.105.17与宿主机具体安装的驱动版本有关,不同机器需要自行ls /usr/lib/x86_64-linux-gnu后找到size libcuda.so.xxx 大于0的文件
find  -name libnvidia-ml*
rm libnvidia-ml.so.1
ln -s libnvidia-ml.so.525.105.17 libnvidia-ml.so.1
ldconfig # 再次检查是否有遗漏

nvcc -V
nvidia-smi
python
>>> import torch
>>> torch.cuda.is_available()
相关推荐
我是koten9 小时前
【运维杂谈】K8s遇到Terminating的名称空间删除不了怎么办?(解决方案亲测有效)
linux·运维·服务器·云原生·kubernetes·k8s·名称空间
RuoyiOffice16 小时前
KubeSphere 容器云实践:从管理 K8s 到建设企业 PaaS,还需要哪些能力
spring boot·kubernetes·kubesphere·jenkins·paas·微服务部署·ruoyi office
风吹稻子17 小时前
etcd备份与恢复:删了 etcd.yaml,容器为什么还在跑?——一次 K8s 控制面死锁排查实录
kubernetes
weirong20 小时前
Operator 的测试该写到哪一层?139 个用例之后我划的三条线
kubernetes
逐流人1 天前
手工建集群到全自动发布:k8s集群部署与DevOps流水线整合实战
ci/cd·云原生·kubernetes·云计算·devops
我不会起名字3221 天前
K8s Pod 反复重启 CrashLoopBackOff:从 exit code 到根因的 5 步排查
云原生·容器·kubernetes·k8s
瑞克-桑切斯1 天前
ERP 企业生产管理系统部署手册
运维·docker·云原生·容器·eureka
我不会起名字3221 天前
K8s 节点磁盘打满导致 Pod 被驱逐:4 类占用与回收顺序
运维·kubernetes·k8s·diskpressure·evicted
瑞克-桑切斯1 天前
docker mail商城
运维·docker·容器
java_logo1 天前
Docker 部署 ReMe:轻松搭建 AI Agent 记忆管理平台
人工智能·docker·容器·ai agent·轩辕镜像·reme·agentscope-ai