- 如何跑旧版本的 tf 代码?这个问题的产生就是值得思考的,但是总有这样那样的需求场景,导致我们确实要跑远古的代码。
- 旧版本代码最大的问题就是环境配置。tf 1.4.0 版本依赖 cuda 8,但是 cuda 8 只有 Ubuntu 16.04 的安装包,没有任何代码能够做到硬件上向前兼容,因为未来不可预测。难道我们要重装系统为 Ubuntu 16.04 吗?对于使用 3080 等全新硬件的人来说,cuda 8 可能根本无法兼容新显卡,对于这类用户难道就无法跑旧版本代码了么?
- 针对这个问题,有两个解决方案,从层次上来说分别介绍。
-
- 使用 nvidia 维护的 tensorflow 版本
- nvidia 显然早就意识到了这个问题,tf 从 1.x 到 2.x 的更新,API 发生了重大变化。如何让尊贵的 3090 用户用上 tf 1.x 呢?NVIDIA 和 Google 合作,维护了一个支持最新硬件的 tf 1.5.0 版本。
- 使用请参考官方仓库 nvidia/tensorflow
-
- 使用 Docker
- Docker 是一个开源的应用容器引擎,简单来说可以把它当作一个轻量的虚拟机。由于使用的是 Linux 容器技术,Docker 优于虚拟机的一个重要方面是几乎没有性能损失,相当于主机的一个进程。
- 也就是我们可以使用 Docker 虚拟一个 Ubuntu 16.04 的环境,安装 cuda 8 和 tf 1.4.0,这样就提供了一个远古环境用来跑远古的 tf 版本代码。
- 具体使用需要用到 nvidia-docker 和 tensorflow 两个镜像,安装方法参考 https://www.tensorflow.org/install/docker 和 https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html#docker
- 步骤
- 安装docker
curl https://get.docker.com | sh \
&& sudo systemctl --now enable docker
- 安装 nvidia-docker2
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-docker2
sudo systemctl restart docker
sudo docker run --rm --gpus all nvidia/cuda:11.0-base nvidia-smi
- 拉取对应版本的 docker image,并安装 pip 依赖
docker pull tensorflow/tensorflow:tags
docker run --gpus all -it -v tensorflow/tensorflow:tags bash
# in docker
pip install -r requirements
docker ps # find the container_id
docker commit <container_id> dsin:v1 # save the configed docker container as a new image
- 如何将一台机器的docker 镜像复制到其他机器?
docker save -o <path for generated tar file> <image name>
docker load -i <path to image tar file>
- 下面介绍如何使用 Docker 进行深度学习训练
- 我们首先安装获得了 tensorflow 的镜像,之后使用 pip 安装项目相关依赖,获得了 DSIN 镜像
- 进入虚拟机的 bash 环境
docker run --gpus all -it -v ~/DSIN:/DSIN dsin:v1 bash
-v host_path:vm_path
- 进入 /DSIN 路径,可以看到映射过来的代码目录,在该 bash 环境中运行 python 即可进行训练
- 其他参考链接
docker run --gpus "0" --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it --rm nvcr.io/nvidia/pytorch:23.05-py3
docker run --gpus "0" -p 8888:8888 -v ~/datasets:/datasets -v ~/Dropbox/Inbox:/workspace/inbox --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -it --rm nvcr.io/nvidia/pytorch:23.05-py3
links
#
- [[基于Docker的深度学习环境]]
- [[dl-env]]