Anygrasp部署全流程
<aside>
✅
本文只记录 AnyGrasp 环境配置、依赖编译、许可证、权重放置与官方 Demo 验证,不涉及具体机器人、相机、目标分割或抓取任务代码。所有版本、命令和输出均来自一台实际完成安装并成功推理的设备。
</aside>
一、最终验证通过的环境
| 项目 | 实际版本或路径 | 状态 |
|---|---|---|
| 操作系统 | Ubuntu 22.04 | ✅ |
| 显卡 | NVIDIA GeForce RTX 4090,24 GB | ✅ |
| NVIDIA 驱动 | 595.80 | ✅ |
nvidia-smi 显示 CUDA |
13.2 | 仅表示驱动最高支持版本 |
| 实际 CUDA Toolkit | 12.8,/usr/local/cuda-12.8 |
✅ |
| NVCC | 12.8.61 | ✅ |
| GCC / G++ | 12.3.0 | ✅ |
| CMake | 3.22.1 | ✅ |
| Ninja | 1.10.1 | ✅ |
| Conda 环境 | anygrasp |
✅ |
| Python | 3.11.15 | ✅ |
| PyTorch | 2.11.0+cu128 | ✅ |
| MinkowskiEngine | 0.5.4,AnyGrasp 修改版 cuda-12-1 分支 |
✅ |
| OpenBLAS | 0.3.31 | ✅ |
| PointNet2 | 本地 CUDA 扩展,CPython 3.11 | ✅ |
| Open3D | 0.19.0 | ✅ |
| graspnetAPI | 1.2.11 | ✅ |
| AnyGrasp SDK | main 分支;安装时提交 b8eaafc |
✅ |
gsnet.so |
CPython 3.11 x86_64 版本 | ✅ |
| 检测权重 | checkpoint_detection.tar,约 283 MB |
✅ |
| 跟踪权重 | checkpoint_tracking.tar,约 23 MB |
✅ 已下载,非检测 Demo 必需 |
| 许可证 | 本机 Feature ID 对应许可证 | ✅ License passed: True |
<aside>
⚠️
最关键的匹配关系是:PyTorch 使用 cu128,本机编译 CUDA 扩展使用 NVCC 12.8。 不要把 PyTorch 的 CUDA 构建版本和本机 NVCC 主版本混用。
</aside>
二、先理解三个容易混淆的版本
2.1 nvidia-smi 中的 CUDA 版本
运行:
nvidia-smi
本机关键输出:
NVIDIA-SMI 595.80
Driver Version: 595.80
CUDA Version: 13.2
GPU: NVIDIA GeForce RTX 4090
Memory: 24564 MiB
这里的 CUDA Version: 13.2 表示当前驱动最高支持的 CUDA 版本,不等于本机已经安装 CUDA Toolkit 13.2。
2.2 真正用于编译的 CUDA Toolkit
真正决定能否编译 MinkowskiEngine 和 PointNet2 的是:
nvcc --version
或直接检查 Toolkit 路径:
/usr/local/cuda-12.8/bin/nvcc --version
本机实际使用:
Cuda compilation tools, release 12.8, V12.8.61
2.3 PyTorch 自己的 CUDA 构建版本
运行:
python - <<'PY'
import torch
print(torch.__version__)
print(torch.version.cuda)
PY
本机结果:
2.11.0+cu128
12.8
最终三者关系:
驱动最高支持 CUDA:13.2
实际 CUDA Toolkit / NVCC:12.8
PyTorch 构建版本:cu128
这套组合已完成实际验证。
三、安装总流程
flowchart TD
A["检查 GPU 与 NVIDIA 驱动"] --> B["确认实际 CUDA Toolkit 与 NVCC"]
B --> C["配置临时 CUDA 环境变量"]
C --> D["创建 Python 3.11 Conda 环境"]
D --> E["安装 PyTorch cu128 并验证 GPU"]
E --> F["准备 GCC、CMake、Ninja、Git"]
F --> G["克隆 AnyGrasp SDK"]
G --> H["安装 OpenBLAS"]
H --> I["编译 MinkowskiEngine"]
I --> J["安装 requirements.txt"]
J --> K["编译 PointNet2"]
K --> L["安装 graspnetAPI"]
L --> M["配置 Python 3.11 对应 gsnet.so"]
M --> N["申请并验证许可证"]
N --> O["放置模型权重"]
O --> P["修复并永久保存动态库加载顺序"]
P --> Q["运行完整环境检查"]
Q --> R["运行官方无界面及可视化 Demo"]
四、第一步:检查显卡、驱动和 CUDA
4.1 检查显卡与驱动
nvidia-smi
应重点确认:
GPU Name: NVIDIA GeForce RTX 4090
Driver Version: 595.80
CUDA Version: 13.2
只要显卡被正确识别,且无驱动报错,即可继续。
4.2 检查 NVCC
最初直接运行:
nvcc --version
which nvcc
本机最初输出:
找不到命令 “nvcc”
但这不一定说明 Toolkit 没安装。继续检查:
ls -ld /usr/local/cuda /usr/local/cuda-12.8
ls -l /usr/local/cuda-12.8/bin/nvcc
/usr/local/cuda-12.8/bin/nvcc --version
本机结果:
/usr/local/cuda -> /usr/local/cuda-12.8/
/usr/local/cuda-12.8/bin/nvcc 存在
Cuda compilation tools, release 12.8, V12.8.61
结论:CUDA 12.8 Toolkit 已完整安装,只是 PATH 没有配置。
<aside>
❌
看到系统提示后不要直接执行 sudo apt install nvidia-cuda-toolkit。应先检查 /usr/local/cuda-*,避免安装另一个版本造成混乱。
</aside>
4.3 临时配置 CUDA 12.8
export CUDA_HOME=/usr/local/cuda-12.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:${LD_LIBRARY_PATH:-}
hash -r
验证:
echo $CUDA_HOME
which nvcc
nvcc --version
本机输出:
/usr/local/cuda-12.8
/usr/local/cuda-12.8/bin/nvcc
Cuda compilation tools, release 12.8, V12.8.61
五、第二步:创建独立 Python 3.11 环境
本机系统 base 环境中 Python 为 3.13,因此单独创建 Python 3.11 环境:
conda create -n anygrasp python=3.11 pip -y
conda activate anygrasp
检查:
python --version
which python
echo $CONDA_DEFAULT_ENV
echo $CUDA_HOME
which nvcc
nvcc --version
本机输出:
Python 3.11.15
/home/hjadmin/miniconda3/envs/anygrasp/bin/python
anygrasp
/usr/local/cuda-12.8
/usr/local/cuda-12.8/bin/nvcc
Cuda compilation tools, release 12.8, V12.8.61
后续所有命令都应在终端前缀为 (anygrasp) 时执行。
六、第三步:安装 PyTorch cu128
python -m pip install torch torchvision \
--index-url <https://download.pytorch.org/whl/cu128>
安装完成后验证:
python - <<'PY'
import torch
print("PyTorch版本:", torch.__version__)
print("PyTorch编译CUDA版本:", torch.version.cuda)
print("CUDA是否可用:", torch.cuda.is_available())
if torch.cuda.is_available():
print("GPU名称:", torch.cuda.get_device_name(0))
print("GPU计算能力:", torch.cuda.get_device_capability(0))
PY
本机输出:
PyTorch版本: 2.11.0+cu128
PyTorch编译CUDA版本: 12.8
CUDA是否可用: True
GPU名称: NVIDIA GeForce RTX 4090
GPU计算能力: (8, 9)
RTX 4090 对应 CUDA 架构 8.9,后续编译使用:
export TORCH_CUDA_ARCH_LIST="8.9"
七、第四步:检查并安装编译工具
检查:
g++ --version
cmake --version
ninja --version
git --version
python -m pip --version
本机初始结果:
g++ 12.3.0
cmake 3.22.1
ninja: 未找到命令
git 2.34.1
pip 26.2,Python 3.11
只缺少 Ninja,因此安装:
sudo apt update
sudo apt install -y ninja-build
验证:
ninja --version
which ninja
结果:
1.10.1
/usr/bin/ninja
八、第五步:下载 AnyGrasp SDK
cd ~
git clone <https://github.com/graspnet/anygrasp_sdk.git>
cd ~/anygrasp_sdk
检查仓库:
git branch --show-current
git log -1 --oneline
ls -la
本机安装时输出:
main
b8eaafc update readme
关键目录:
anygrasp_sdk/
├── grasp_detection/
├── grasp_tracking/
├── license_registration/
├── pointnet2/
├── requirements.txt
└── README.md
后续如果仓库最新提交变化,以实际 git log -1 --oneline 为准。
九、第六步:安装 OpenBLAS
cd ~/anygrasp_sdk
conda install -c anaconda openblas-devel -y
验证:
conda list | grep -E 'openblas|blas'
ls $CONDA_PREFIX/include/cblas.h
ls $CONDA_PREFIX/lib/libopenblas*
本机输出:
blas 1.0 openblas
libopenblas 0.3.31
openblas-devel 0.3.31
/home/hjadmin/miniconda3/envs/anygrasp/include/cblas.h
/home/hjadmin/miniconda3/envs/anygrasp/lib/libopenblas.so
只要 cblas.h 和 libopenblas.so 都存在,即可继续。
十、第七步:编译 MinkowskiEngine 0.5.4
10.1 下载 AnyGrasp 修改版
cd ~/anygrasp_sdk
mkdir -p dependencies
cd dependencies
git clone <https://github.com/chenxi-wang/MinkowskiEngine.git>
cd MinkowskiEngine
git checkout cuda-12-1
检查:
git branch --show-current
git log -1 --oneline
git status
本机输出:
cuda-12-1
3586275 fix compilation with CUDA 12.8
位于分支 cuda-12-1
工作区干净
10.2 编译前确认 PyTorch 与 CUDA
echo "CUDA_HOME=$CUDA_HOME"
echo "CONDA_PREFIX=$CONDA_PREFIX"
which gcc
which g++
gcc --version | head -n 1
python - <<'PY'
import torch
from torch.utils.cpp_extension import CUDA_HOME
print("PyTorch:", torch.__version__)
print("PyTorch CUDA:", torch.version.cuda)
print("CUDA_HOME detected:", CUDA_HOME)
print("CXX11 ABI:", torch._C._GLIBCXX_USE_CXX11_ABI)
PY
本机输出:
CUDA_HOME=/usr/local/cuda-12.8
CONDA_PREFIX=/home/hjadmin/miniconda3/envs/anygrasp
/usr/bin/gcc
/usr/bin/g++
gcc 12.3.0
PyTorch: 2.11.0+cu128
PyTorch CUDA: 12.8
CUDA_HOME detected: /usr/local/cuda-12.8
CXX11 ABI: True
10.3 CUDA 12.8 与 GCC 12 头文件兼容处理
先检查是否存在旧写法:
grep -n "__to_address(__r.get())" \
/usr/include/c++/12/bits/shared_ptr_base.h \
|| echo "未发现需要修改的代码"
本机发现两处:
1561: auto __raw = __to_address(__r.get());
1577: auto __raw = __to_address(__r.get());
必须先备份:
sudo cp -a \
/usr/include/c++/12/bits/shared_ptr_base.h \
/usr/include/c++/12/bits/shared_ptr_base.h.anygrasp.bak
再修改:
sudo sed -i \
's/\bauto __raw = __to_address(__r.get());/auto __raw = std::__to_address(__r.get());/g' \
/usr/include/c++/12/bits/shared_ptr_base.h
验证:
grep -n "__raw =" \
/usr/include/c++/12/bits/shared_ptr_base.h \
| grep "to_address(__r.get())"
预期:
1561: auto __raw = std::__to_address(__r.get());
1577: auto __raw = std::__to_address(__r.get());
检查旧写法是否消失:
grep -nP '(?<!std::)__to_address\(__r\.get\(\)\)' \
/usr/include/c++/12/bits/shared_ptr_base.h \
|| echo "旧写法已全部修改"
输出:
旧写法已全部修改
确认备份:
ls -l /usr/include/c++/12/bits/shared_ptr_base.h.anygrasp.bak
<aside>
⚠️
这一步会修改系统 C++ 头文件,只在确实检测到相同代码并完成备份后执行。GCC 版本不同,路径也不同,例如 GCC 11 对应 /usr/include/c++/11/。
</aside>
10.4 编译安装
cd ~/anygrasp_sdk/dependencies/MinkowskiEngine
export CUDA_HOME=/usr/local/cuda-12.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:${LD_LIBRARY_PATH:-}
export TORCH_CUDA_ARCH_LIST="8.9"
export MAX_JOBS=4
rm -rf build
set -o pipefail
python setup.py install \
--blas_include_dirs=${CONDA_PREFIX}/include \
--blas_library_dirs=${CONDA_PREFIX}/lib \
--blas=openblas \
2>&1 | tee ~/minkowski_build.log
成功结束标志:
Finished processing dependencies for MinkowskiEngine==0.5.4
若失败,查看日志末尾:
tail -n 100 ~/minkowski_build.log
10.5 验证安装
先在源码目录中验证:
python - <<'PY'
import torch
import MinkowskiEngine as ME
print("MinkowskiEngine版本:", ME.__version__)
print("MinkowskiEngine路径:", ME.__file__)
print("PyTorch版本:", torch.__version__)
print("CUDA可用:", torch.cuda.is_available())
PY
输出:
MinkowskiEngine版本: 0.5.4
PyTorch版本: 2.11.0+cu128
CUDA可用: True
然后离开源码目录再次验证,排除“只导入了当前文件夹源码”的情况:
cd ~
python - <<'PY'
import torch
import MinkowskiEngine as ME
print("MinkowskiEngine版本:", ME.__version__)
print("MinkowskiEngine路径:", ME.__file__)
print("CUDA可用:", torch.cuda.is_available())
PY
本机最终路径:
/home/hjadmin/miniconda3/envs/anygrasp/lib/python3.11/site-packages/
MinkowskiEngine-0.5.4-py3.11-linux-x86_64.egg/...
出现 OMP_NUM_THREADS 未设置的警告不影响安装,后面统一配置。
十一、第八步:安装 AnyGrasp 基础依赖
cd ~/anygrasp_sdk
python -m pip install -r requirements.txt
验证:
python - <<'PY'
import numpy
import PIL
import scipy
import tqdm
import open3d
print("numpy:", numpy.__version__)
print("Pillow:", PIL.__version__)
print("scipy:", scipy.__version__)
print("tqdm:", tqdm.__version__)
print("open3d:", open3d.__version__)
print("基础依赖全部导入成功")
PY
本机输出:
numpy: 2.4.4
Pillow: 12.2.0
scipy: 1.17.1
tqdm: 4.70.0
open3d: 0.19.0
基础依赖全部导入成功
检查依赖完整性:
python -m pip check
输出:
No broken requirements found.
十二、第九步:编译 PointNet2 CUDA 扩展
cd ~/anygrasp_sdk/pointnet2
export CUDA_HOME=/usr/local/cuda-12.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:${LD_LIBRARY_PATH:-}
export TORCH_CUDA_ARCH_LIST="8.9"
export MAX_JOBS=4
rm -rf build
set -o pipefail
python setup.py install 2>&1 | tee ~/pointnet2_build.log
成功结束标志:
Installed .../pointnet2-0.0.0-py3.11-linux-x86_64.egg
Finished processing dependencies for pointnet2==0.0.0
验证:
cd ~
python - <<'PY'
import torch
import pointnet2
from pointnet2 import _ext
print("PointNet2路径:", pointnet2.__file__)
print("PointNet2 CUDA扩展:", _ext.__file__)
print("PyTorch:", torch.__version__)
print("CUDA可用:", torch.cuda.is_available())
print("PointNet2导入成功")
PY
本机输出:
PointNet2路径: .../pointnet2-0.0.0-py3.11-linux-x86_64.egg/pointnet2/__init__.py
PointNet2 CUDA扩展: .../_ext.cpython-311-x86_64-linux-gnu.so
PyTorch: 2.11.0+cu128
CUDA可用: True
PointNet2导入成功
十三、第十步:安装 graspnetAPI
cd ~/anygrasp_sdk
git clone <https://github.com/graspnet/graspnetAPI.git>
cd graspnetAPI
python -m pip install .
验证:
cd ~
python - <<'PY'
import graspnetAPI
from graspnetAPI import Grasp, GraspGroup
print("graspnetAPI 路径:", graspnetAPI.__file__)
print("Grasp 类:", Grasp)
print("GraspGroup 类:", GraspGroup)
print("graspnetAPI 导入成功")
PY
正常输出:
graspnetAPI 路径: .../site-packages/graspnetAPI/__init__.py
Grasp 类: <class 'graspnetAPI.grasp.Grasp'>
GraspGroup 类: <class 'graspnetAPI.grasp.GraspGroup'>
graspnetAPI 导入成功
再检查:
python -m pip check
输出:
No broken requirements found.
可能出现以下警告:
Failed to import geometry msgs
Failed to import ros dependencies
RigidTransform ros methods will be unavailable
这些只是 ROS 接口不可用,不影响普通 AnyGrasp 推理。
十四、第十一步:配置 Python 3.11 对应的 gsnet.so
14.1 检查可用文件
cd ~/anygrasp_sdk
find grasp_detection -maxdepth 2 \
-type f -name '*cpython-311*.so' -print
本机输出:
grasp_detection/gsnet_versions/gsnet.cpython-311-x86_64-linux-gnu.so
Python 3.11 必须使用 cpython-311,不能混用 cpython-310 或 cpython-312。
14.2 复制到检测目录
cd ~/anygrasp_sdk/grasp_detection
cp gsnet_versions/gsnet.cpython-311-x86_64-linux-gnu.so gsnet.so
ls -lh gsnet.so
本机结果:
-rw-rw-r-- ... 1.8M ... gsnet.so
14.3 验证 SDK 接口
python - <<'PY'
import gsnet
print("gsnet路径:", gsnet.__file__)
print("gsnet导入成功")
print("create_detector:", hasattr(gsnet, "create_detector"))
print("check_license:", hasattr(gsnet, "check_license"))
PY
本机输出:
gsnet导入成功
create_detector: True
check_license: True
新版 SDK 使用 create_detector(),没有旧版 AnyGrasp 类并不表示安装失败。
十五、第十二步:获取 Feature ID 并申请许可证
15.1 准备注册目录
cd ~/anygrasp_sdk/license_registration
cp ../grasp_detection/gsnet_versions/\
gsnet.cpython-311-x86_64-linux-gnu.so gsnet.so
获取本机 Feature ID:
python -c "from gsnet import get_feature_id; print(get_feature_id())"
会输出一个以 N 开头的机器编号。该编号与本机绑定,用于许可证申请。
15.2 收到许可证后检查压缩包
本机收到的许可证压缩包中包含:
licenseCfg.json
*.lic
*.public_key
*.signature
只查看文件名:
unzip -l license_*.zip
15.3 解压并放置到检测目录
cd ~/anygrasp_sdk
mkdir -p license_extract
unzip -q license_*.zip -d license_extract
mkdir -p grasp_detection/license
找到解压后的许可证文件夹,并将其内部四个文件复制到:
~/anygrasp_sdk/grasp_detection/license/
最终结构:
grasp_detection/license/
├── licenseCfg.json
├── *.lic
├── *.public_key
└── *.signature
15.4 验证许可证
cd ~/anygrasp_sdk/grasp_detection
python - <<'PY'
from gsnet import check_license
print("开始验证 AnyGrasp 许可证...")
result = check_license("license")
print("check_license 返回值:", result)
PY
本机结果:
License passed: True, state: PASSED
check_license 返回值: True
十六、第十三步:放置模型权重
官方提供两个权重:
checkpoint_detection.tar 约 283 MB
checkpoint_tracking.tar 约 23 MB
检测 Demo 必需的是 checkpoint_detection.tar。
16.1 检查文件类型和完整性
这两个 .tar 实际是 PyTorch ZIP 格式模型文件,不要使用 tar -xf 解压。
file checkpoint_detection.tar checkpoint_tracking.tar
会显示:
Zip archive data
使用 Python 检查 CRC:
python - <<'PY'
from pathlib import Path
import zipfile
for path in [
Path("checkpoint_detection.tar"),
Path("checkpoint_tracking.tar"),
]:
with zipfile.ZipFile(path, "r") as zf:
print(path, "内部文件数:", len(zf.namelist()))
print("完整性:", "通过" if zf.testzip() is None else "失败")
PY
本机结果:
checkpoint_detection.tar 内部文件数: 416
完整性: 通过
checkpoint_tracking.tar 内部文件数: 375
完整性: 通过
16.2 复制检测权重
cd ~/anygrasp_sdk
mkdir -p grasp_detection/log
cp -a checkpoint_detection.tar \
grasp_detection/log/checkpoint_detection.tar
检查:
ls -lh \
checkpoint_detection.tar \
grasp_detection/log/checkpoint_detection.tar
两者均约为:
283M
检查哈希:
sha256sum \
checkpoint_detection.tar \
grasp_detection/log/checkpoint_detection.tar
两行哈希必须完全一致。本机哈希:
a05c3690b95c8b65e78b1bb8a28f1d5ca96613391946e450afacae840bbcf7b2
十七、第十四步:解决 CXXABI_1.3.15 not found
17.1 问题现象
完整导入时曾出现:
ImportError: /lib/x86_64-linux-gnu/libstdc++.so.6:
version `CXXABI_1.3.15' not found
原因不是缺少 Conda 的新库,而是程序优先加载了系统旧版 libstdc++.so.6。
17.2 检查 Conda 与系统库
conda list | grep -E 'libstdcxx|libgcc|icu'
ls -l "$CONDA_PREFIX"/lib/libstdc++.so.6*
本机 Conda 环境中:
icu 78.3
libgcc 16.1.0
libstdcxx 16.1.0
libstdc++.so.6 -> libstdc++.so.6.0.35
检查支持的 ABI:
strings "$CONDA_PREFIX/lib/libstdc++.so.6" \
| grep '^CXXABI_' | sort -V | tail
Conda 库支持到:
CXXABI_1.3.17
系统库只支持到:
CXXABI_1.3.13
17.3 临时修复
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$CUDA_HOME/lib64"
验证:
echo "$LD_LIBRARY_PATH"
输出:
/home/hjadmin/miniconda3/envs/anygrasp/lib:/usr/local/cuda-12.8/lib64
完整导入测试随后通过。
十八、第十五步:永久保存 AnyGrasp 环境变量
创建 Conda 激活脚本:
mkdir -p "$CONDA_PREFIX/etc/conda/activate.d"
cat > "$CONDA_PREFIX/etc/conda/activate.d/anygrasp_cuda.sh" <<'EOF'
export CUDA_HOME=/usr/local/cuda-12.8
export PATH="$CUDA_HOME/bin:$PATH"
# Conda 新版 libstdc++ 必须放在 CUDA 和系统库之前
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$CUDA_HOME/lib64"
# RTX 4090 的 CUDA 计算能力
export TORCH_CUDA_ARCH_LIST="8.9"
# MinkowskiEngine 建议低于 24
export OMP_NUM_THREADS=12
EOF
重新激活:
conda deactivate
conda activate anygrasp
检查:
echo "$CUDA_HOME"
which nvcc
echo "$LD_LIBRARY_PATH"
echo "$TORCH_CUDA_ARCH_LIST"
echo "$OMP_NUM_THREADS"
本机输出:
/usr/local/cuda-12.8
/usr/local/cuda-12.8/bin/nvcc
/home/hjadmin/miniconda3/envs/anygrasp/lib:/usr/local/cuda-12.8/lib64
8.9
12
以后每次执行:
conda activate anygrasp
这些变量都会自动生效。
十九、第十六步:完整环境验证
cd ~
python - <<'PY'
import sqlite3
print("sqlite3: OK")
import torch
print("PyTorch:", torch.__version__)
print("PyTorch CUDA:", torch.version.cuda)
print("CUDA可用:", torch.cuda.is_available())
print("GPU:", torch.cuda.get_device_name(0))
import MinkowskiEngine as ME
print("MinkowskiEngine:", ME.__version__)
import pointnet2
from pointnet2 import _ext
print("PointNet2:", _ext.__file__)
import open3d
print("Open3D:", open3d.__version__)
import graspnetAPI
from graspnetAPI import Grasp, GraspGroup
print("graspnetAPI:", graspnetAPI.__file__)
print("全部模块导入成功")
PY
本机输出:
sqlite3: OK
PyTorch: 2.11.0+cu128
PyTorch CUDA: 12.8
CUDA可用: True
GPU: NVIDIA GeForce RTX 4090
MinkowskiEngine: 0.5.4
PointNet2: .../_ext.cpython-311-x86_64-linux-gnu.so
Open3D: 0.19.0
graspnetAPI: .../site-packages/graspnetAPI/__init__.py
全部模块导入成功
ROS 相关警告可以忽略。
二十、第十七步:运行官方 Demo 验证环境
20.1 确认最终目录
anygrasp_sdk/
└── grasp_detection/
├── demo.py
├── gsnet.so
├── license/
│ ├── licenseCfg.json
│ ├── *.lic
│ ├── *.public_key
│ └── *.signature
├── log/
│ └── checkpoint_detection.tar
└── example_data/
├── color.png
├── depth.png
└── seg_mask.png
20.2 无可视化运行
conda activate anygrasp
cd ~/anygrasp_sdk/grasp_detection
python demo.py \
--checkpoint_path log/checkpoint_detection.tar
本机关键输出:
checking license on .../grasp_detection/gsnet.so
License passed: True, state: PASSED
Top 20 scores:
[0.6406076 0.55339277 0.48864532 ...]
官方 demo.py 会连续测试多种配置,因此会输出多组 Top 20 scores,这是正常现象。
20.3 可视化运行
python demo.py \
--checkpoint_path log/checkpoint_detection.tar \
--vis
验证结果:
- Open3D 窗口正常打开;
- 点云正常显示;
- 抓取夹爪模型正常显示;
- 多个官方示例窗口均能正常关闭和继续运行;
- 终端无新的错误。
至此,AnyGrasp 环境、许可证、模型权重和官方 Demo 均已完整验证通过。
二十一、其他设备需要修改的位置
| 变化项 | 本教程值 | 需要修改的位置 |
|---|---|---|
| CUDA Toolkit | 12.8 | CUDA_HOME、PyTorch 下载源、MinkowskiEngine 分支 |
| CUDA 路径 | /usr/local/cuda-12.8 |
所有 CUDA_HOME 和激活脚本 |
| Python | 3.11 | Conda 创建命令、gsnet.cpython-311-...so |
| GPU | RTX 4090 | TORCH_CUDA_ARCH_LIST="8.9" |
| GCC | 12 | /usr/include/c++/12/bits/shared_ptr_base.h 路径 |
| Conda 环境名 | anygrasp |
所有 conda activate 命令 |
| 内存或 CPU 较少 | MAX_JOBS=4 |
编译失败或内存不足时降为 2 |
21.1 计算显卡架构
其他显卡执行:
python - <<'PY'
import torch
print(torch.cuda.get_device_capability(0))
PY
例如:
(8, 9) → TORCH_CUDA_ARCH_LIST="8.9"
(8, 6) → TORCH_CUDA_ARCH_LIST="8.6"
21.2 Python 版本与 gsnet.so
| Python | 应选择的文件标识 |
|---|---|
| 3.10 | cpython-310 |
| 3.11 | cpython-311 |
| 3.12 | cpython-312 |
二进制版本不匹配时,通常会出现导入失败或符号错误。
二十二、常见问题
22.1 nvcc: command not found
先检查:
ls /usr/local/cuda-*/bin/nvcc
如果文件存在,只需配置 CUDA_HOME 和 PATH,不必重装 CUDA。
22.2 CXXABI_1.3.15 not found
将 Conda 环境的 lib 放在最前:
export LD_LIBRARY_PATH="$CONDA_PREFIX/lib:$CUDA_HOME/lib64"
并写入 Conda activate.d 脚本。
22.3 no kernel image is available for execution
通常是编译时未包含当前显卡架构。RTX 4090 使用:
export TORCH_CUDA_ARCH_LIST="8.9"
清理 build/ 后重新编译对应 CUDA 扩展。
22.4 编译内存不足
降低并行任务:
export MAX_JOBS=2
然后重新编译。
22.5 gsnet.so 导入失败
检查:
python --version
ls grasp_detection/gsnet_versions
确保 Python 3.11 使用 cpython-311 文件。
22.6 .tar 无法被 tar -tf 读取
AnyGrasp 模型权重虽然扩展名是 .tar,实际是 PyTorch ZIP 格式。不要解压,程序直接读取。可使用 zipfile.ZipFile 做完整性检查。
22.7 ROS 警告
以下警告不影响普通 AnyGrasp 推理:
Failed to import geometry msgs
Failed to import ros dependencies
RigidTransform ros methods will be unavailable
22.8 Open3D 窗口打不开
先不使用 --vis,确认无界面推理正常。若无桌面或通过纯 SSH 使用,Open3D 窗口可能无法显示。
二十三、最终检查清单
- [x] RTX 4090 被
nvidia-smi正确识别 - [x] 驱动版本为 595.80
- [x] CUDA Toolkit 12.8 与 NVCC 12.8.61 可用
- [x] Python 3.11.15 独立 Conda 环境可用
- [x] PyTorch 2.11.0+cu128 可调用 RTX 4090
- [x] Ninja、CMake、GCC、Git 可用
- [x] OpenBLAS 头文件与动态库存在
- [x] MinkowskiEngine 0.5.4 编译并独立导入成功
- [x] AnyGrasp 基础依赖安装成功
- [x] PointNet2 CUDA 扩展编译成功
- [x] graspnetAPI 1.2.11 安装成功
- [x] Python 3.11 对应
gsnet.so配置正确 - [x] Conda 与 CUDA 动态库加载顺序已修复
- [x] 许可证验证通过
- [x] 检测权重完整并放置正确
- [x] 官方无界面 Demo 推理成功
- [x] Open3D 可视化 Demo 成功
最终状态:Ubuntu 22.04 + RTX 4090 + Python 3.11.15 + CUDA Toolkit 12.8 + PyTorch 2.11.0+cu128 的 AnyGrasp 环境已完整配置并验证通过。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐



所有评论(0)