机器学习(ML)正成为许多开发工作流的关键部分。 无论你是数据科学家、ML 工程师还是开始使用 ML for Linux 的 Windows 子系统(WSL)开始学习之旅,都提供了一个运行最常见和常用的 GPU 加速 ML 工具的绝佳环境。
设置这些工具的方法有很多不同。 例如,WSL、TensorFlow-DirectML 和 PyTorch-DirectML中的 NVIDIA CUDA 都提供了将 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
运行以下命令,安装 Docker Desktop 或直接在 WSL 中安装 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 torch-directml
在 TensorFlow-DirectML 或 PyTorch-DirectML 的交互式 Python 会话中运行快速添加示例,以确保一切正常运行。
如果有疑问或遇到困难,请访问 GitHub 上的 DirectML 存储库。
多个 GPU
如果计算机上有多个 GPU,还可以在 WSL 内部访问它们。 但是,一次只能访问一个。 若要选择特定的 GPU,请将下面的环境变量设置为 GPU 的名称,因为它显示在设备管理器中:
export MESA_D3D12_DEFAULT_ADAPTER_NAME="<NameFromDeviceManager>"
这将进行字符串匹配,因此,如果将它设置为“NVIDIA”,它将匹配以“NVIDIA”开头的第一个 GPU。