PyTorch快速起步¶
准备工作¶
PyTorch Start Locally 提供了一个快速部署安装,通过简单的排列选择就能够获得安装命令(请参考官网)。例如,我在虚拟机 z-k8s-n-1
中通过 IOMMU ( 采用OVMF实现passthrough GPU和NVMe存储 )实现虚拟机内部访问 NVIDIA GPU
对于运行 GPU Kubernetes架构 ,例如我的虚拟机 z-k8s-n-1
是Kubernetes集群中的一个worker节点,则只需要为 容器运行时(Container Runtimes) 安装对应的NVIDIA Container Toolkit( 为containerd安装NVIDIA Container Toolkit 或 为Docker安装NVIDIA Container Toolkit ),这样结合 NVIDIA GPU Operator ( 安装NVIDIA GPU Operator )就能自动在 GPU Kubernetes架构 调度运行支持 NVIDIA CUDA 的容器 pods
。
备注
这里我的虚拟机 z-k8s-n-1
已经 为containerd安装NVIDIA Container Toolkit ,所以实际虚拟机已经完成了 安装CUDA准备 ,并且配置了 CUDA软件仓库 。这样仅需执行一步CUDA安装,如果你没有如我这样的准备工作,则可能需要补充完成这两个步骤。
不过,对于直接在虚拟机内部进行直接开发(训练/推理),则需要 安装NVIDIA CUDA :
sudo apt -y install cuda
警告
这里我实践发现,已经 为containerd安装NVIDIA Container Toolkit 的虚拟机无法 安装NVIDIA CUDA ,会提示冲突:
The following packages have unmet dependencies:
libnvidia-extra-525 : Conflicts: libnvidia-extra
libnvidia-extra-530 : Conflicts: libnvidia-extra
E: Error, pkgProblemResolver::Resolve generated breaks, this may be caused by held packages.
所以我暂停这个实践测试,改为先构建 NVIDIA Virtual GPU (vGPU) ,将物理 Nvidia Tesla P10 GPU运算卡 拆分成 2 块 vgpu (每个12G显存),然后分别 采用OVMF实现passthrough GPU和NVMe存储 直通到2个虚拟机中进行模拟测试(其中2个vgpu准备通过切换方式用于 容器运行时(Container Runtimes) 和 KVM Atlas 虚拟机),这样就能实现不同的场景。
再次准备工作¶
在完成 vGPU快速起步 之后,我现在有2个虚拟机分别各配置一块 vGPU。需要注意,PyTorch运行环境非常占用磁盘空间,需要将默认虚拟机磁盘 使用libvirt和XFS在线扩展Ceph RBD设备 将 vda
扩展到 32GB
# 以下命令在Host物理机上运行,扩展虚拟机磁盘
rbd resize --size 32768 y-k8s-n-2
virsh blockresize --domain y-k8s-n-2 --path vda --size 32G
rbd resize --size 51200 y-k8s-n-2.docker
virsh blockresize --domain y-k8s-n-2 --path vdb --size 50G
# 以下命令在虚拟机 y-k8s-n-2 运行,扩展文件系统
#安装growpart
apt install cloud-guest-utils
#扩展分区2
growpart /dev/vda 2
#扩展XFS根分区
xfs_growfs /
#扩展vdb分区1
growpart /dev/vdb 1
#扩展btrfs分区
btrfs filesystem resize max /var/lib/docker
START LOCALLY¶
备注
测试环境采用 vGPU快速起步 构建的虚拟机内部 vGPU
安装 python3 / pip3 ( 采用 Python virtualenv ):
apt install python3-pip
apt install python3-venv
创建virtualenv:
cd ~
python3 -m venv venv3
激活:
source venv3/bin/activate
安装:
pip3 install torch torchvision torchaudio
验证:
import torch
x = torch.rand(5, 3)
print(x)
输出类似:
tensor([[0.2434, 0.6199, 0.1791],
[0.5107, 0.5054, 0.5134],
[0.6419, 0.2998, 0.9463],
[0.4190, 0.5476, 0.8832],
[0.3318, 0.1395, 0.9307]])