WSL 中 ML 的 GPU 加速入门
机器学习 (ML) 正在成为许多开发工作流的关键部分。 无论你是数据科学家、ML 工程师,还是刚开始学习 ML,适用于 Linux 的 Windows 子系统 (WSL) 都为你提供了运行最常见和最常用的 GPU 加速 ML 工具的绝佳环境。
可通过多种不同的方法来设置这些工具。 例如,NVIDIA CUDA in WSL、TensorFlow-DirectML、PyTorch-DirectML 都提供了将 GPU 用于 ML 和 WSL 的不同方式。 若要详细了解选择其中一个而不是另一个的原因,请参阅 GPU 加速 ML 训练。
本指南介绍如何设置:
- 如果你有 NVIDIA 图形卡并运行示例 ML 框架容器,则为 NVIDIA CUDA
- 你的 AMD、Intel 或 NVIDIA 图形卡上的 TensorFlow-DirectML 和 PyTorch-DirectML
先决条件
- 确保你运行的是 Windows 11 或 Windows 10 版本 21H2 或更高版本。
- 安装 WSL,并为你的 Linux 发行版设置用户名和密码。
使用 Docker 设置 NVIDIA CUDA
运行以下命令,直接在 WSL 中安装 Docker Desktop 或安装 Docker 引擎
curl https://get.docker.com | sh
sudo service docker start
如果你直接安装了 Docker 引擎,请按照以下步骤安装 NVIDIA 容器工具包。
通过运行以下命令为 NVIDIA 容器工具包设置稳定存储库:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-docker-keyring.gpg
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-docker-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
通过运行以下命令安装 NVIDIA 运行时包和依赖项:
sudo apt-get update
sudo apt-get install -y nvidia-docker2
运行机器学习框架容器和示例。
若要运行机器学习框架容器并开始将 GPU 用于此 NVIDIA NGC TensorFlow 容器,请输入此命令:
docker run --gpus all -it --shm-size=1g --ulimit memlock=-1 --ulimit stack=67108864 nvcr.io/nvidia/tensorflow:20.03-tf2-py3
可以通过运行以下命令来运行内置在此容器中的预训练模型示例:
cd nvidia-examples/cnn/
python resnet.py --batch_size=64
有关设置和使用 NVIDIA CUDA 的其他方法,请参阅 WSL 上的 NVIDIA CUDA 用户指南。
设置TensorFlow-DirectML 或 PyTorch-DirectML
设置 Python 环境。
建议设置虚拟 Python 环境。 可以使用许多工具来设置虚拟 Python 环境 - 对于这些说明,我们将使用 Anaconda 的 Miniconda。
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
conda create --name directml python=3.7 -y
conda activate directml
安装由你选择的 DirectML 支持的机器学习框架。
TensorFlow-DirectML:
pip install tensorflow-directml
PyTorch-DirectML:
sudo apt install libblas3 libomp5 liblapack3
pip install pytorch-directml
在 TensorFlow-DirectML 或 PyTorch-DirectML 的交互式 Python 会话中运行快速添加示例,以确保一切正常。
如果有疑问或遇到问题,请访问 GitHub 上的 DirectML 存储库。
多个 GPU
如果计算机上有多个 GPU,你也可以在 WSL 中访问它们。 但是,一次只能访问一个。 若要选择特定的 GPU,请将下面的环境变量设置为你的 GPU 在设备管理器中显示的名称:
export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"
这将执行字符串匹配,因此,如果你将其设置为“NVIDIA”,它将匹配以“NVIDIA”开头的第一个 GPU。