在新版 Nvidia NGC PyTorch Docker 容器安装 conda 包

Nvidia NGC

NVIDIA NGC 是 NVIDIA GPU 云计算平台的缩写,它是一个面向人工智能、机器学习和深度学习应用的集成式平台。NGC 提供了一系列优化的深度学习框架、预训练模型、AI 工具和容器,以帮助开发人员快速开发和部署深度学习应用程序。

NGC 容器是为深度学习应用程序构建的 Docker 容器,这些容器中包含了经过优化的深度学习框架和库,以及各种 AI 工具和预训练模型。这些容器可以在任何支持 NVIDIA GPU 的云环境中使用,使开发人员能够快速地构建和部署深度学习应用程序。

此外,NGC 还提供了一系列 AI 模型,这些模型经过训练和优化,可以在多个领域进行使用。NGC 还提供了 AI 工具和解决方案,以帮助用户简化和加速他们的 AI 工作流程。

在 Docker 上配置拉取 nvcr.io 的 NGC 镜像方法

问题

PyTorch Release 22.11 中,英伟达宣布不再在 NGC 容器中默认安装 conda:

Starting with the 22.11 PyTorch NGC container, miniforge is removed and all Python packages are installed in the default Python environment. In case you depend on Conda-specific packages, which might not be available on PyPI, we recommend building these packages from source.

这导致了几个问题:

  • Anaconda/miniconda 没了:如有需要,则要手动安装(其实最好不要装:docker 已经很好地支持虚拟化了;依赖管理应该使用更现代的 PDM 或者 poetry);
  • 只支持 conda 的包无法安装:这个问题比较严重,PyPI 的包不如 conda 来的丰富,尤其是一些 conda-forge 里面的包。

❗其它 NGC 容器也可能有此问题
比如 TensorFlow/Keras、PaddlePaddle 等框架。尽管我不使用这些框架,但具体的安装方法应该是相同的。

解决方案

0. 更新 Ubuntu

经常有人忘了这一步。

# 非 root 下记得加 sudo
apt update
apt dist-upgrade -y

1. 手动安装 conda

这里以 miniconda 为例,anaconda 也一样。

# 下载最新版 miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
# 修改权限
chmod +x Miniconda3-latest-Linux-x86_64.sh
# 安装至 /opt/conda
./Miniconda3-latest-Linux-x86_64.sh -b -p /opt/conda
# 删除安装文件
rm ./Miniconda3-latest-Linux-x86_64.sh
# 激活 conda
/opt/conda/bin/conda init bash
# 进入 base 环境下的 bash
bash

2. 用 conda 安装需要的包

这里和一般的安装没有区别。

# 此处以格式化包 black 为例
conda install black

3. 将 conda 目录添加到 PYTHONPATH 环境变量

首先找到自己的 base 环境对应的 site-packages 目录。

这里的 python-3.x 是指 conda 的版本!!!记得替换为你自己的版本!!!

# Python 3.10
/opt/conda/lib/python3.10/site-packages

将它添加到 PYTHONPATH 环境变量中:

# python3.10 要替换成你的 conda 自带的 Python 版本
# 这个版本不是 NGC 自带的那个 Python 的版本!
export "PYTHONPATH=/opt/conda/lib/python3.10/site-packages"

退出 conda 环境:

conda deactivate

此时 Python 应该是 NGC 容器自己安装的 Python,也是原装的 PyTorch、TensorFlow、PaddlePaddle 等安装的 Python:/usr/bin/python

which python

且此时这个 Python 也能成功 import 刚刚安装的 black 包。

在 NGC 自带的 Python 中可以 import 刚刚 conda 安装的 black 包
在 NGC 自带的 Python 中可以 import 刚刚 conda 安装的 black 包

适用版本

  • Nvidia NGC PyTorch container 22.11
  • Nvidia NGC PyTorch container 22.12
  • Nvidia NGC PyTorch container 23. 01
  • Nvidia NGC PyTorch container 23. 02
  • NGC TensorFlow, etc.

发表评论