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


    Win Docker Desktop + WSL2 安装

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

    安装WSL-Ubuntu

    wsl -l -v
    wsl --install Ubuntu-18.04
    
    • 1
    • 2

    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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    去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
    
    • 1
    • 2
    • 3
    • 4
    • 5

    去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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    去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()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
  • 相关阅读:
    iOS上架流程
    详细介绍 React 中如何使用 redux
    挑战算法题:四数之和
    Betaflight关于STM32F405 SBUS协议兼容硬件电气特性问题
    Pytorch:Dataset类和DataLoader类
    ubuntu离线编译安装cmake 3.22.5(could not fonud OPENSSL) and cmake-versinon查不到版本问题
    伦敦银怎么算自己的收益?
    齿轮故障诊断的实验数据集及python处理
    style样式优先级问题【display:block依旧无法显示DOM元素】
    大数据Apache Druid(八):Druid JDBC API和其他OLAP分析框架对比
  • 原文地址:https://blog.csdn.net/Straka/article/details/134365276