Ubuntu20.04系统下Pi0具身智能开发环境搭建
Ubuntu 20.04 系统下 Pi0 具身智能开发环境搭建
想试试最近火热的具身智能模型,比如 Pi0 或者 Spirit v1.5,自己动手搭建一个开发环境?这篇文章就是为你准备的。
我最近也在折腾这块,发现网上很多教程要么太零散,要么跳过了关键的排错步骤,让人卡在某个环节半天过不去。今天我就把自己在 Ubuntu 20.04 系统上,从零开始配置 Pi0 开发环境的完整流程,包括踩过的坑和解决方法,都整理出来。目标很简单:让你能顺利跑起来,看到效果。
整个过程主要分三大块:先把 CUDA 驱动和工具装好,这是 GPU 加速的基础;然后配置 ROS 环境,因为很多机器人仿真和工具链依赖它;最后,我们通过一个预置的镜像来快速部署 Pi0 环境,并验证它是否工作正常。
1. 准备工作:系统检查与基础依赖
在开始安装各种“大件”之前,我们先确保系统处于一个干净、稳定的状态。Ubuntu 20.04 是一个长期支持版本,社区支持好,兼容性也不错,很适合作为开发起点。
1.1 系统更新与基础工具
首先,打开你的终端,我们执行一次全面的系统更新,并安装一些后续步骤会用到的工具。
# 更新软件包列表并升级所有已安装的包
sudo apt update && sudo apt upgrade -y
# 安装一些基础编译工具和依赖
sudo apt install -y build-essential cmake git wget curl software-properties-common
build-essential 包含了 GCC、G++ 等编译套件,cmake 是很多项目的构建工具,git 用于拉取代码,curl 和 wget 用于下载文件,这些都是标配。
1.2 确认显卡型号与驱动
具身智能模型训练和推理通常需要 GPU 加速,所以一块 NVIDIA 显卡是必要的。我们先确认一下你的显卡型号。
# 查看 NVIDIA 显卡信息(如果已安装驱动)
nvidia-smi
如果这条命令报错,说明 NVIDIA 驱动还没装。我们可以用 lspci 命令先看看显卡型号。
# 查看 PCI 设备,过滤出 NVIDIA 显卡
lspci | grep -i nvidia
记下你的显卡型号(比如 GeForce RTX 4090),这关系到后面选择哪个版本的驱动和 CUDA。
2. CUDA 与 cuDNN 安装:GPU 加速基石
CUDA 是 NVIDIA 推出的并行计算平台,cuDNN 是针对深度神经网络的 GPU 加速库。它们是运行大多数 AI 框架(如 PyTorch, TensorFlow)的底层基础。
2.1 安装 NVIDIA 显卡驱动
Ubuntu 20.04 自带的“附加驱动”工具可以比较方便地安装驱动,但为了和后续的 CUDA 版本更好匹配,我推荐直接从 NVIDIA 官网下载安装。
首先,移除任何可能存在的旧版 NVIDIA 驱动。
sudo apt purge -y *nvidia* *cuda* *cudnn*
sudo apt autoremove -y
然后,添加 NVIDIA 的官方驱动仓库并安装。这里我们选择版本为 535 的驱动,这是一个比较稳定且兼容性广的版本。
# 添加 NVIDIA 驱动 PPA
sudo add-apt-repository ppa:graphics-drivers/ppa -y
sudo apt update
# 安装驱动(这里以 535 版本为例,你可以根据你的显卡和 CUDA 需求调整)
sudo apt install -y nvidia-driver-535
安装完成后,必须重启系统。
sudo reboot
重启后,再次运行 nvidia-smi,你应该能看到类似下面的输出,显示了显卡型号、驱动版本和 CUDA 版本(这里显示的是驱动支持的最高 CUDA 版本,不代表已安装)。
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 535.154.05 Driver Version: 535.154.05 CUDA Version: 12.2 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|===============================+======================+======================|
| 0 NVIDIA GeForce ... On | 00000000:01:00.0 On | N/A |
| 0% 45C P8 15W / 350W | 200MiB / 24576MiB | 0% Default |
| | | N/A |
+-------------------------------+----------------------+----------------------+
2.2 安装 CUDA Toolkit 11.8
Pi0 及其相关的 VLA 模型生态,目前对 CUDA 11.x 系列的支持最为成熟和稳定。我们选择 CUDA 11.8 这个长期支持版本。
前往 NVIDIA 官网的 CUDA Toolkit 11.8 下载页面,根据你的系统选择“Linux” -> “x86_64” -> “Ubuntu” -> “20.04” -> “runfile (local)”。
在终端中,使用 wget 下载安装包,然后执行安装。
# 下载 CUDA 11.8 安装包(文件较大,请耐心等待)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
# 赋予执行权限并运行安装程序
sudo sh cuda_11.8.0_520.61.05_linux.run
安装过程中会有一个交互界面:
- 输入
accept同意协议。 - 在组件选择界面,取消勾选
Driver,因为我们已经安装了驱动。确保CUDA Toolkit 11.8是选中的。 - 其他选项保持默认,选择
Install开始安装。
安装完成后,需要将 CUDA 路径添加到系统环境变量中。
# 编辑 ~/.bashrc 文件
echo 'export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
# 使环境变量生效
source ~/.bashrc
验证 CUDA 是否安装成功:
nvcc --version
你应该能看到输出中包含 release 11.8 的字样。
2.3 安装 cuDNN
cuDNN 需要注册 NVIDIA 开发者账号才能下载。登录后,在 cuDNN 下载页面 找到对应 CUDA 11.x 的版本(例如 cuDNN v8.9.x for CUDA 11.x),选择“Local Installer for Linux (x86_64)”的 .tar 格式文件下载。
假设你下载的文件名为 cudnn-linux-x86_64-8.9.x.x_cuda11-archive.tar.xz,执行以下命令安装:
# 解压下载的文件
tar -xvf cudnn-linux-x86_64-8.9.x.x_cuda11-archive.tar.xz
# 复制头文件和库文件到 CUDA 目录
sudo cp cudnn-linux-x86_64-8.9.x.x_cuda11-archive/include/cudnn*.h /usr/local/cuda-11.8/include
sudo cp -P cudnn-linux-x86_64-8.9.x.x_cuda11-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64
# 修改文件权限
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn*.h /usr/local/cuda-11.8/lib64/libcudnn*
至此,GPU 计算的基础环境就搭建好了。
3. ROS Noetic 安装与配置
机器人操作系统(ROS)是机器人开发的事实标准,提供了大量用于仿真、感知、控制的工具和库。Pi0 等具身模型虽然不一定直接依赖 ROS 运行,但整个开发、测试和与真实机器人交互的生态链与 ROS 紧密相连。我们安装 ROS 1 的最后一个版本——Noetic,它原生支持 Ubuntu 20.04。
3.1 安装 ROS Noetic
按照 ROS 官方 Wiki 的步骤进行:
# 1. 设置软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 2. 添加密钥
sudo apt install curl -y
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 3. 安装
sudo apt update
sudo apt install -y ros-noetic-desktop-full
# 4. 初始化 rosdep
sudo rosdep init
rosdep update
3.2 设置环境变量
为了让终端能识别 ROS 命令,需要将它的环境变量添加到 ~/.bashrc。
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
3.3 创建工作空间并安装常用工具
ROS 项目通常在自己的工作空间(workspace)中开发。我们创建一个,并安装一些后续可能用到的工具包。
# 创建并初始化一个 catkin 工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
# 将这个工作空间的环境变量也加入 bashrc
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 安装一些有用的 ROS 工具
sudo apt install -y python3-rosinstall python3-rosinstall-generator python3-wstool build-essential
sudo apt install -y ros-noetic-rviz ros-noetic-moveit ros-noetic-ros-control ros-noetic-gazebo-ros-pkgs
现在,你可以通过运行 roscore 来测试 ROS 核心是否成功启动。按 Ctrl+C 可以停止。
4. Pi0 具身智能环境快速部署
前面两步搭建了底层基础,现在我们来部署具体的 Pi0 开发环境。为了避开复杂的源码编译和依赖解决,我们使用一个预配置好的 Docker 镜像,这是最快、最不容易出错的方式。
4.1 安装 Docker 与 NVIDIA Container Toolkit
Docker 可以让我们在一个隔离的、环境一致的容器中运行应用。
# 1. 卸载旧版本 Docker(如果有)
sudo apt remove -y docker docker-engine docker.io containerd runc
# 2. 安装依赖,添加 Docker 官方 GPG 密钥
sudo apt update
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 3. 设置 Docker 仓库
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
# 4. 安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 5. 将当前用户加入 docker 组,避免每次使用 sudo
sudo usermod -aG docker $USER
# **重要:需要注销并重新登录,或者重启系统,此更改才会生效**
重新登录后,验证 Docker 安装:
docker run hello-world
接下来,安装 NVIDIA Container Toolkit,让 Docker 容器也能使用宿主机的 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
# 安装 nvidia-container-toolkit
sudo apt update
sudo apt install -y nvidia-container-toolkit
# 重启 Docker 服务
sudo systemctl restart docker
验证 GPU 在 Docker 中是否可用:
docker run --rm --gpus all nvidia/cuda:11.8.0-base-ubuntu20.04 nvidia-smi
这个命令应该会输出和宿主机上 nvidia-smi 类似的信息。
4.2 拉取并运行 Pi0 预置镜像
现在,我们可以拉取一个已经集成了 Pi0 模型、相关依赖和示例代码的 Docker 镜像。假设这个镜像名为 pi0-embodied-ai:v1(具体名称请根据你获取的镜像信息调整)。
# 拉取镜像(请替换为实际的镜像仓库地址和标签)
# 例如:docker pull your-registry/pi0-embodied-ai:v1
# 这里假设你已经将镜像文件下载到本地并加载,或者从某个仓库拉取
# docker pull csdn-mirror/pi0-embodied-ai:latest
# 为了演示,我们假设你已经有了镜像,直接运行一个交互式容器
# --gpus all: 将GPU透传给容器
# -it: 交互式终端
# --rm: 容器退出后自动删除
# -v $(pwd)/workspace:/workspace: 将宿主机的当前目录下的workspace文件夹挂载到容器的/workspace,方便文件交换
docker run --gpus all -it --rm -v $(pwd)/workspace:/workspace --name pi0-dev csdn-mirror/pi0-embodied-ai:latest /bin/bash
成功运行后,你的终端提示符会变成容器的提示符(如 root@container-id:/#)。
4.3 在容器内验证环境
进入容器后,我们可以快速验证几个关键点。
# 1. 验证 GPU 和 CUDA
nvidia-smi
python3 -c "import torch; print(f'PyTorch版本: {torch.__version__}'); print(f'CUDA是否可用: {torch.cuda.is_available()}'); print(f'当前CUDA设备: {torch.cuda.current_device()}')"
# 2. 检查 Pi0 相关代码和模型(假设镜像已预置在 /app 目录)
ls -la /app
# 可能会看到类似 pi0_inference.py, requirements.txt, README.md 等文件
# 3. 尝试运行一个简单的示例脚本(请根据镜像内的实际文件调整)
cd /app
# 通常会有个 requirements.txt,可以先安装Python依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
# 运行一个最简单的推理示例
# python pi0_demo.py --task \"pick up the red block\"
如果以上步骤都没有报错,并且模型能加载并给出响应(可能是动作序列或状态信息),那么恭喜你,Pi0 的本地开发环境就已经成功搭建并运行起来了!
5. 常见问题排错指南
搭建过程中难免会遇到问题,这里汇总了几个我遇到过的典型问题及其解决方法。
5.1 NVIDIA-SMI 可以运行,但 torch.cuda.is_available() 返回 False
这通常是 PyTorch 版本与 CUDA 版本不匹配导致的。
- 解决方法:在容器内或你的 Python 环境中,使用与 CUDA 11.8 兼容的 PyTorch 版本。访问 PyTorch 官网,找到对应 CUDA 11.8 的安装命令。例如:
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
5.2 Docker 容器内无法找到 GPU (nvidia-smi: command not found)
这通常是 NVIDIA Container Toolkit 没有正确安装或配置。
- 解决方法:
- 确保宿主机已按照步骤 4.1 正确安装并重启了 Docker。
- 运行
docker run时一定要加上--gpus all参数。 - 在宿主机上运行
dpkg -l | grep nvidia-container-toolkit确认其已安装。 - 检查
/etc/docker/daemon.json文件,确保其包含"runtimes": {"nvidia": ...}的配置。安装工具包时通常会自动配置。
5.3 运行示例代码时出现模型文件下载错误或缺失
预置镜像可能不包含巨大的模型权重文件,或者需要从网络下载。
- 解决方法:
- 检查镜像的文档或
/app目录下的 README,看模型文件应放置在哪里。 - 根据文档提供的链接(如 Hugging Face Model Hub),手动下载模型权重文件(
.bin或.safetensors文件),并通过挂载的卷(如/workspace)放入容器内正确路径。 - 有时需要设置环境变量指定模型路径,如
export MODEL_PATH=/workspace/pi0_model。
- 检查镜像的文档或
5.4 内存不足(OOM)错误
运行较大的具身模型可能需要可观的 GPU 显存和系统内存。
- 解决方法:
- 关闭其他占用 GPU 的程序。
- 在运行 Docker 容器时,可以使用
--shm-size参数增加共享内存,例如--shm-size=8g。 - 如果模型支持,尝试在代码中减小批量大小(batch size)。
- 考虑使用模型量化技术或使用更小的模型变体。
整体走下来,感觉在 Ubuntu 20.04 上搭建这套环境,核心就是耐心和顺序。先稳扎稳打把 CUDA 和驱动配好,这是所有加速的基础,出问题也最容易排查。ROS 的安装相对标准化,跟着官方指南走基本没问题。最后用 Docker 镜像来部署 Pi0 环境,真的是省心省力,避免了无数潜在的依赖冲突。
环境搭好只是第一步,后面怎么用模型、怎么结合自己的机器人做实验,才是更有趣的部分。希望这篇详细的指南能帮你顺利跨过环境配置这个门槛。如果在实际操作中遇到这里没覆盖的问题,多看看错误日志,善用搜索引擎,大部分都能找到答案。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐

所有评论(0)