第二章:环境搭建——先把地基打牢
说实话,做ACT模型训练和嵌入式部署,最让人头疼的往往不是算法本身,而是环境配置。我见过太多同学卡在第一步——装个PyTorch装了一整天,最后发现CUDA版本不对。嗯,咱们今天就把这事一次性说清楚。
核心要点:环境配置就像盖房子打地基,地基歪了,后面全白搭。我个人的习惯是,每做一个新项目,先花半天时间把环境理清楚。
2.1 Python环境配置——别用系统自带的Python
你可能会问:「我电脑里已经有Python了,为啥还要折腾?」
原因很简单:系统自带的Python通常版本老旧,而且你装一堆包进去,万一搞崩了,系统工具也会跟着遭殃。我当年就干过这种蠢事——把系统Python的site-packages搞得一团糟,最后重装了系统。
我的建议:用Miniconda或者Anaconda来管理Python环境。我个人偏爱Miniconda,轻量、干净。
# 下载Miniconda(Linux为例)
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
# 创建独立环境
conda create -n act_env python=3.9
conda activate act_env
# 验证
python --version
# 输出:Python 3.9.x
小技巧:我习惯把环境名取得有辨识度,比如act_env、ros_env,这样切换时不会搞混。你想想看,要是同时维护五六个项目,环境名全是test1、test2,那不乱套了?
2.2 PyTorch安装——版本匹配是门学问
PyTorch的安装其实很简单,但坑都在版本匹配上。说白了,你要搞清楚三件事:你的显卡型号、CUDA版本、PyTorch版本,这三者必须对齐。
我记得有一次,帮一个师弟配环境,他拿着RTX 4090,却装了PyTorch 1.8,结果死活跑不起来。后来一看,PyTorch 1.8根本不支持Ada Lovelace架构。
# 查看显卡驱动支持的CUDA版本
nvidia-smi
# 输出中会显示 CUDA Version: 12.x
# 安装匹配的PyTorch(以CUDA 12.1为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
# 验证安装
python -c "import torch; print(torch.__version__); print(torch.cuda.is_available())"
# 输出应为:2.x.x 和 True
注意:千万不要用pip install torch这种不带索引的安装方式!它会下载CPU版本的PyTorch,你装完发现cuda.is_available()返回False,那才叫欲哭无泪。
2.3 CUDA与cuDNN配置——别被版本号吓到
CUDA和cuDNN的配置,其实没那么玄乎。我刚开始接触时也被那一堆版本号搞晕了——CUDA 11.8、12.1、12.4,cuDNN 8.9、9.0……到底该用哪个?
我的经验:先看PyTorch官方支持的CUDA版本,然后选最新的稳定版。比如PyTorch 2.3推荐CUDA 12.1,那就用这个。
# 下载CUDA 12.1(以Ubuntu 22.04为例)
wget https://developer.download.nvidia.com/compute/cuda/12.1.0/local_installers/cuda_12.1.0_530.30.02_linux.run
sudo sh cuda_12.1.0_530.30.02_linux.run
# 配置环境变量
echo 'export PATH=/usr/local/cuda-12.1/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
# 验证CUDA
nvcc --version
# 下载cuDNN(需要注册NVIDIA账号)
# 解压后复制到CUDA目录
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/include/cudnn*.h /usr/local/cuda-12.1/include/
sudo cp cudnn-linux-x86_64-8.9.7.29_cuda12-archive/lib/libcudnn* /usr/local/cuda-12.1/lib64/
sudo chmod a+r /usr/local/cuda-12.1/include/cudnn*.h /usr/local/cuda-12.1/lib64/libcudnn*
避坑指南:我曾经遇到过cuDNN版本和CUDA不匹配,导致训练时出现「CUDNN_STATUS_NOT_INITIALIZED」错误。排查了整整一天,最后发现是cuDNN 9.0和CUDA 12.1不兼容。所以,一定要去NVIDIA官网查兼容性矩阵!
2.4 ROS基础安装——机器人开发者的必备工具
ROS(Robot Operating System)说白了,就是一套让机器人各个部件能「说话」的框架。咱们做ACT模型部署到机器人上,ROS是绕不开的坎。
ROS有两个主流版本:ROS 1(Noetic)和ROS 2(Humble/Foxy)。我个人建议直接上ROS 2,因为它是未来趋势,而且对嵌入式部署更友好。
# 安装ROS 2 Humble(Ubuntu 22.04)
sudo apt update
sudo apt install ros-humble-desktop
# 设置环境
echo 'source /opt/ros/humble/setup.bash' >> ~/.bashrc
source ~/.bashrc
# 验证安装
ros2 --version
小提示:ROS 2的节点通信机制比ROS 1强太多了。我记得以前用ROS 1做多机器人协同,经常出现节点掉线的情况。换了ROS 2之后,稳如老狗。
2.5 本章知识体系总览
下面这张图,是我自己梳理的环境搭建逻辑。你跟着这个流程走,基本不会出大问题。
2.6 环境验证——跑通第一个示例
环境搭好了,怎么知道对不对?我的做法是写一个极简的测试脚本,同时验证PyTorch和ROS能不能协同工作。
# test_env.py
import torch
import rclpy
from rclpy.node import Node
print(f"PyTorch版本: {torch.__version__}")
print(f"CUDA可用: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f"GPU型号: {torch.cuda.get_device_name(0)}")
# 测试Tensor计算
x = torch.randn(3, 3).cuda()
y = torch.randn(3, 3).cuda()
z = x @ y
print(f"GPU计算测试通过: {z.shape}")
# 测试ROS 2
rclpy.init()
node = Node("test_node")
print(f"ROS 2节点创建成功: {node.get_name()}")
node.destroy_node()
rclpy.shutdown()
print("🎉 所有环境配置正确!")
总结一下:环境配置这事,急不得。我每次换新机器,都会按照这个流程走一遍,大概半小时搞定。你只要记住三点——版本匹配、环境隔离、验证测试,基本不会翻车。