基于WSL2+Docker的TensorFlow2配置流程
本流程在Windows 11下进行,也适用于最新版本的Windows 10。基于Windows操作系统,对于日常使用和同时使用多个其他的开发环境更加友好,上手难度低;而基于Linux的深度学习,生态成熟且案例也更多,因此WSL2是一个非常不错的选择。同时本文兼顾了基于Cuda的深度学习开发。
适用于 Linux 的 Windows 子系统(WSL)可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本,它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件。 它的主要目标是提高文件系统性能,以及添加完全的系统调用兼容性。
对于PyTorch而言,直接使用WSL2+Linux发行版本+Conda建立环境即可,而TF2的GPU支持需要安装Nvidia的各种驱动和库,再加上本身是在WSL中进行,配置起来好像很复杂,因此本文将基于Docker配置环境。
为了实现 TensorFlow GPU 支持,需要各种驱动程序和库。为了简化安装并避免库冲突,建议您使用支持 GPU 的 TensorFlow Docker 映像(仅限 Linux)。此设置方式只需要 NVIDIA® GPU 驱动程序。——TensorFlow官方文档-GPU支持
文章引用部分及其内链接仅作辅助理解,不影响正常配置流程。
1. 设置WSL2环境
首先配置WSL2,可参考详细的WSL官方文档-最佳实践,这里简要说明步骤。
- 安装WSL
在Microsoft应用商店里安装Windows Subsystem for Linux。
- 安装Linux发行版本
在Microsoft应用商店里安装Ubuntu22.04或Ubuntu20.04或其他,不过感觉2004会好一些,深度学习的很多工具并不是越新越好,安装好后打开,设置完用户名和密码即可。以下将会使用Ubuntu举例。
- 安装Windows Terminal
Windows11自带,Windows10可以在应用商店下载。安装完后可在Terminal里直接打开刚刚配置好的Linux发行版本。
- 安装Visual Studio Code
都是微软出品,接入WSL更方便一些。接下来就可以通过VSCode进入WSL了,具体流程详见WSL官方文档-开始通过WSL使用 Visual Studio Code
- NVIDIA Driver
如果使用Cuda进行开发,顺便使用GeForce Experience把显卡驱动更新一下。
2. 设置Docker
开头已经说明了使用Docker的原因,在使用TensorFlow Docker 映像之前,首先安装Docker。这里要注意的是,不要从Ubuntu里安装docker,根据WSL的官方文档,直接安装Docker Desktop WSL 2 backend on Windows,在其中开启对于WSL2的支持即可。Docker的设置可参考详细的WSL官方文档-安装 Docker Desktop。
Docker 容器与虚拟机类似,但不会创建整个虚拟操作系统。 相反,Docker 允许应用使用与运行它的系统相同的 Linux 内核。 这使得应用包能够仅要求主计算机上尚未安装的部件,从而降低包大小以及提高性能。——WSL官方文档-Docker 容器概述
后续的Docker命令输入可直接从Windows命令行中输入。
docker是用了wsl2内核,所以powershell里面用docker,就是调用wsl2里面的docker,没区别。——知乎-2022最新 Docker 和 WSL2 ,炼丹环境配置指南
3. 下载TF2镜像
本部分可详细参考TensorFlow官方文档-安装-Docker。
- 更换Docker国内源
下载之前,更换Docker镜像为国内源,否则下载过慢且断连。试了几个,科大的不行了,可以使用阿里云镜像加速器。参考CSDN-Docker Hub的使用以及配置阿里云镜像加速,登录阿里云官网,获取镜像加速器地址,在Docker Desktop-Settings-Docker Engine页中,更改Json添加"registry-mirrors":[]一项,并列入国内源即可:
{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"features": {
"buildkit": true
},
"registry-mirrors": [
"https://****.mirror.aliyuncs.com"
]
}
- 下载镜像
我们要安装的是最新的TF2+GPU+Jupyter版本,因此在Windows命令行中直接输入并等待下载完成。
docker pull tensorflow/tensorflow:latest-gpu-jupyter
下载好后,我们可以从Docker Desktop-Images-Local中看到Name为tensorflow/tensorflow,Tag为latest-gpu-jupyter的镜像。
4. 使用镜像
- 创建容器
在Windows命令提示符中输入
docker run --gpus all -it tensorflow/tensorflow:latest-gpu-jupyter
我们可以从在Docker Desktop-Containers中看到随机命名的新容器。
- 进入容器
开启Vscode,左下角“New WSL Window”进入WSL Ubuntu系统,操作详看1.4节。为VSCode安装Docker扩展,在左侧选项卡中选中Docker,可以看到绿色三角正在运行的Docker容器,右键,选择“Attach Visual Studio Code”,选择刚刚创建的新名字。
进入新的VSCode窗口,这个时候我们就进入容器了,从扩展页搜索Jupyter,选择在Container ***中安装,安装完后,新建一个Jupyter Notebook,右上角选择内核自动选定Python3, 然后就可以开始编辑啦。
- GPU支持
根据知乎-2022最新 Docker 和 WSL2 ,炼丹环境配置指南的说法,只要运行参数包含以下即可开启GPU,否则无GPU运行
--gpus all
在新建的Notebook里,输入以下一句并运行查看显卡情况
!nvidia-smi
输入以下两句并运行查看TF对GPU的调用情况
import tensorflow as tf
tf.config.list_physical_devices('GPU')
5. Docker操作
随后可通过VSCode Docker扩展或Docker Desktop进行可视化容器暂停,停止,删除等操作。