环境准备与依赖安装:Ubuntu系统要求、NVIDIA驱动与CUDA安装、Docker与NVIDIA Container Toolkit配置、Python环境与pip依赖
说实话,做Isaac Sim的Headless部署,环境配置这一步最容易被低估。很多人觉得不就是装个驱动、配个Docker嘛,结果一跑起来全是坑。我当年第一次在服务器上部署时,光CUDA版本不匹配就折腾了两天。嗯,咱们今天就把这事一次性说清楚。
核心原则:Isaac Sim Headless对底层环境有硬性要求。版本不对,后面全白费。请严格按照以下清单逐一核对。
2.1 Ubuntu系统要求
我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。Isaac Sim官方对这两个版本支持最好。你想想看,一个仿真平台要调用的底层库太多了,系统版本太新或太旧都可能出兼容性问题。
| 项目 | 推荐配置 | 最低要求 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 LTS | Ubuntu 20.04 LTS |
| 内核版本 | 5.15+ | 5.4+ |
| 磁盘空间 | 100GB+ (SSD) | 50GB |
| 内存 | 32GB+ | 16GB |
| 网络 | 千兆以太网 | 百兆 |
我的建议:如果你用的是云服务器(比如AWS、阿里云),选镜像时直接搜"Ubuntu 22.04 LTS"就好。别选Desktop版,Server版就够了,反正我们跑Headless。
2.2 NVIDIA驱动与CUDA安装
这是整个环境准备里最容易出问题的一环。我曾经在一台新服务器上装驱动,结果把系统搞崩了,最后只能重装。为什么会这样?因为驱动和内核版本没对上。
先检查你的显卡型号:
lspci | grep -i nvidia
然后安装驱动。我推荐用官方runfile方式,或者用Ubuntu的nvidia-driver-535包:
# 添加显卡驱动PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
# 安装推荐驱动
sudo apt install nvidia-driver-535
# 重启
sudo reboot
# 验证
nvidia-smi
CUDA方面,Isaac Sim 2023.1版本要求CUDA 11.8。别装最新的12.x,我试过,跑不起来。
# 下载CUDA 11.8 runfile
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
# 安装(注意不要装驱动,只装CUDA Toolkit)
sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent
# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证
nvcc --version
避坑指南:我曾经在安装CUDA时勾选了"Install NVIDIA Driver",结果和系统已有的驱动冲突,导致nvidia-smi报错。记住:驱动和CUDA分开装,驱动用apt,CUDA用runfile的--toolkit选项。
2.3 Docker与NVIDIA Container Toolkit配置
Headless部署的核心就是Docker。说白了,我们把Isaac Sim打包进容器,这样不管换到哪台服务器,环境都一样。
安装Docker:
# 卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt update
sudo apt install ca-certificates curl gnupg lsb-release
# 添加Docker官方GPG密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
# 验证
sudo docker run hello-world
然后安装NVIDIA Container Toolkit。这一步很多人会忘,结果容器里调用不了GPU:
# 添加NVIDIA Container Toolkit仓库
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 update
sudo apt install nvidia-container-toolkit
# 重启Docker
sudo systemctl restart docker
# 验证(跑一个带GPU的容器)
sudo docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi
我的习惯:验证成功后,我会把当前用户加到docker组,这样就不用每次sudo了:sudo usermod -aG docker $USER。然后退出重新登录。
2.4 Python环境与pip依赖
Isaac Sim自带Python解释器,但我们在宿主机上还需要一些工具来管理容器和脚本。我个人习惯用Miniconda来隔离环境,但如果你不想装conda,直接用系统Python也行。
# 检查系统Python
python3 --version # 需要3.8+
# 安装pip
sudo apt install python3-pip
# 安装必要工具
pip3 install --user docker-compose
pip3 install --user requests
pip3 install --user pyyaml
如果你用conda:
# 下载Miniconda
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建环境
conda create -n isaac_env python=3.10
conda activate isaac_env
# 安装依赖
pip install docker-compose requests pyyaml
注意:Isaac Sim容器内部用的是Python 3.10,所以宿主机上最好也用3.10,避免版本不一致导致奇怪的问题。我遇到过因为Python版本不同,容器内外传递数据时编码报错的情况。
2.5 整体环境验证
所有东西装完后,我建议跑一个完整的验证流程:
- 驱动验证:
nvidia-smi显示GPU信息 - CUDA验证:
nvcc --version显示11.8 - Docker验证:
docker run hello-world正常输出 - GPU容器验证:
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu22.04 nvidia-smi显示GPU - Python验证:
python3 --version显示3.8+
这五步都过了,环境就算准备好了。嗯,说实话,这一步花点时间把基础打牢,后面跑Isaac Sim的时候会省心很多。
环境准备这块,说白了就是三板斧:系统、驱动、容器。每一步都有对应的验证命令,别偷懒。我见过太多人装完驱动就跑Isaac Sim,结果报错"Unable to initialize CUDA",回头一看驱动版本不对。嗯,咱们把基础打牢,后面就顺畅了。