当前位置: 首页 > news >正文

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

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

  • Win Docker Desktop + WSL2 安装
  • 安装WSL-Ubuntu
  • 拉取镜像并测试
  • 挂载数据并开放端口
  • 导出镜像或导入镜像
  • 在k8s集群部署

Win Docker Desktop + WSL2 安装

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

安装WSL-Ubuntu

wsl -l -v
wsl --install Ubuntu-18.04

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

拉取镜像并测试

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版本不一致也能正常部署,但是不排除有兼容性问题。

挂载数据并开放端口

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)运行。

导出镜像或导入镜像

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)后才能识别到显卡。在容器内运行:

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()

相关文章:

  • 个人Typora存储图片专用
  • 破解tomcat密码并上传webshell
  • 双写绕过 [极客大挑战 2019]BabySQL 1
  • 社区牛奶直供站:创新供应链,满足消费者需求
  • 三、Vue3中使用Pinia修改State的方法
  • bzero和memset的区别
  • Spring-Security前后端分离权限认证
  • Android 基本属性绘制文本对象FontMetrics
  • 小程序怎么获取textarea的值?
  • 算法通关村第十六关青铜挑战——原来滑动窗口如此简单!
  • 【C++】一维字符数组 与 二维字符数组
  • Jenkins CICD过程常见异常
  • mysql核心知识整理
  • 11.14 知识总结(视图层、模层板)
  • 【备忘】ChromeDriver 官方下载地址 Selenium,pyppetter依赖
  • JavaScript 如何正确处理 Unicode 编码问题!
  • [译] React v16.8: 含有Hooks的版本
  • 「译」Node.js Streams 基础
  • ➹使用webpack配置多页面应用(MPA)
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Fabric架构演变之路
  • input的行数自动增减
  • java概述
  • js ES6 求数组的交集,并集,还有差集
  • 记一次用 NodeJs 实现模拟登录的思路
  • 将回调地狱按在地上摩擦的Promise
  • 利用jquery编写加法运算验证码
  • 如何在 Tornado 中实现 Middleware
  • 小李飞刀:SQL题目刷起来!
  • 智能网联汽车信息安全
  • 主流的CSS水平和垂直居中技术大全
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • 阿里云ACE认证之理解CDN技术
  • 大数据全解:定义、价值及挑战
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • $.ajax中的eval及dataType
  • (1)常见O(n^2)排序算法解析
  • (3)STL算法之搜索
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)springboot教学评价 毕业设计 641310
  • (生成器)yield与(迭代器)generator
  • (转)甲方乙方——赵民谈找工作
  • ***通过什么方式***网吧
  • .net 4.0发布后不能正常显示图片问题
  • .NET设计模式(8):适配器模式(Adapter Pattern)
  • @AliasFor注解
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • @RequestParam @RequestBody @PathVariable 等参数绑定注解详解
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ 转载 ] SharePoint 资料
  • [145] 二叉树的后序遍历 js
  • [2016.7.Test1] T1 三进制异或