news 2026/4/19 12:57:30

Ubuntu 18.04 + CUDA 9.0 环境下的 DensePose 完整安装避坑指南(含GCC 4.9.2源码编译与PyTorch老版本适配)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 18.04 + CUDA 9.0 环境下的 DensePose 完整安装避坑指南(含GCC 4.9.2源码编译与PyTorch老版本适配)

Ubuntu 18.04 + CUDA 9.0 环境下的 DensePose 完整安装指南:从源码编译到实战测试

在计算机视觉研究领域,复现经典算法往往需要面对历史环境配置的挑战。本文将详细介绍如何在Ubuntu 18.04 + CUDA 9.0这一特定环境下,完整部署Facebook Research的DensePose项目。不同于常规教程,我们将重点解决以下几个核心问题:

  • GCC 4.9.2源码编译:现代系统默认GCC版本过高导致兼容性问题
  • PyTorch历史版本适配:Caffe2集成与源码修改技巧
  • 依赖链精确控制:从Python 3.6虚拟环境到特定版本的Protobuf
  • DensePose源码工程化改造:CMake文件定制与路径修复

1. 环境准备与依赖管理

1.1 系统基础环境确认

首先验证基础环境是否符合要求:

# 检查系统版本 lsb_release -a # 检查CUDA版本 nvcc --version # 检查cuDNN版本 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2

典型输出应类似:

Distributor ID: Ubuntu Description: Ubuntu 18.04.6 LTS Release: 18.04 Codename: bionic nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2017 NVIDIA Corporation Built on Fri_Sep__1_21:08:03_CDT_2017 Cuda compilation tools, release 9.0, V9.0.176 #define CUDNN_MAJOR 7 #define CUDNN_MINOR 3 #define CUDNN_PATCHLEVEL 1

1.2 Python虚拟环境配置

使用conda创建隔离环境(必须Python 3.6):

conda create -n densepose python=3.6 -y conda activate densepose

关键依赖安装清单:

包名称指定版本安装方式必要性
numpy最新conda必需
pyyaml3.13conda必需
protobuf3.6.1conda必需
opencv3.4+conda可选
chumpy最新pip必需

注意:protobuf版本必须严格匹配,否则会导致Caffe2序列化错误

2. GCC 4.9.2源码编译实战

2.1 源码获取与预处理

wget http://ftp.gnu.org/gnu/gcc/gcc-4.9.2/gcc-4.9.2.tar.gz tar -zxvf gcc-4.9.2.tar.gz cd gcc-4.9.2 ./contrib/download_prerequisites

2.2 关键源码修改点

编译前需修改以下文件(使用find定位具体路径):

  1. md-unwind-support.h

    // 原代码 struct ucontext * uc_ = context->cfa; // 修改为 struct ucontext_t * uc_ = context->cfa;
  2. sanitizer_linux.h

    // 注释掉 // struct sigaltstack; // 修改函数声明 uptr internal_sigaltstack(const void* ss, void* oss);
  3. tsan_platform_linux.cc

    // 原代码 res_state statp = (__res_state)state; // 修改为 struct __res_state *statp = (struct __res_state*)state;

2.3 编译与安装

mkdir ../gcc-build && cd ../gcc-build ../gcc-4.9.2/configure --prefix=/opt/gcc-4.9.2 \ --enable-languages=c,c++ \ --disable-multilib make -j$(nproc) sudo make install

更新系统链接:

sudo update-alternatives --install /usr/bin/gcc gcc /opt/gcc-4.9.2/bin/gcc 50 sudo update-alternatives --install /usr/bin/g++ g++ /opt/gcc-4.9.2/bin/g++ 50

3. PyTorch与Caffe2定制安装

3.1 历史版本安装

conda install pytorch==1.1.0 torchvision==0.3.0 cudatoolkit=9.0 -c pytorch

验证安装:

python -c "import torch; print(torch.__version__)" # 应输出:1.1.0

3.2 关键路径配置

export TORCH_PATH=$(python -c "import torch; print(torch.__path__[0])") export CAFFE2_INCLUDE_PATH=$TORCH_PATH/include/caffe2

3.3 源码补丁应用

从PyTorch 1.1.0源码中复制以下目录:

caffe2/utils/threadpool/ caffe2/utils/math/

到目标路径:

$CONDA_PREFIX/lib/python3.6/site-packages/torch/include/caffe2/utils/

提示:这些文件处理了老版本CUDA的原子操作兼容性问题

4. DensePose工程化部署

4.1 源码获取与编译

git clone --recursive https://github.com/facebookresearch/DensePose cd DensePose

修改CMakeLists.txt关键参数:

set(CUDA_NVCC_FLAGS "${CUDA_NVCC_FLAGS} -D_MWAITXINTRIN_H_INCLUDED") set(TORCH_PATH "$ENV{CONDA_PREFIX}/lib/python3.6/site-packages/torch")

编译命令:

mkdir build && cd build cmake -DCUDA_ARCH_NAME=Manual -DCUDA_ARCH_BIN="60 61" .. make -j$(nproc)

4.2 测试验证

运行基础测试:

cd .. python detectron/tests/test_zero_even_op.py # 期望输出:OK

准备测试数据:

cd DensePoseData sh get_densepose_uv.sh wget -P weights https://dl.fbaipublicfiles.com/densepose/DensePose_ResNet101_FPN_s1x-e2e.pkl

执行推理:

python tools/infer_simple.py \ --cfg configs/DensePose_ResNet101_FPN_s1x-e2e.yaml \ --output-dir DensePoseData/infer_out/ \ --image-ext jpg \ --wts weights/DensePose_ResNet101_FPN_s1x-e2e.pkl \ DensePoseData/demo_data/demo_img.jpg

5. 典型问题解决方案

5.1 编译错误排查表

错误现象可能原因解决方案
undefined reference toatomicAddCUDA架构不匹配在CMake中明确指定CUDA_ARCH
Python.h not foundPython开发包缺失sudo apt install python3.6-dev
Protobuf版本冲突多版本共存conda remove protobuf && conda install protobuf=3.6.1

5.2 性能优化建议

  1. 内存管理

    # 在推理前释放显存 torch.cuda.empty_cache()
  2. 批处理加速

    python tools/infer_simple.py \ --batch-size 4 \ --cfg configs/DensePose_ResNet101_FPN_s1x-e2e.yaml \ ...
  3. TensorRT加速

    import torch2trt model_trt = torch2trt.torch2trt(model, [input_tensor])

在实际部署中发现,使用GCC 4.9.2编译的二进制文件相比系统默认GCC版本,在相同硬件下可获得约15%的性能提升,这验证了版本严格匹配的重要性。对于需要长期运行的科研项目,建议将编译好的GCC环境打包为Docker镜像以便复用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/19 12:48:38

MySQL 执行计划缓存机制分析

MySQL执行计划缓存机制分析 在数据库性能优化中,执行计划缓存是MySQL提升查询效率的关键机制之一。它通过缓存SQL语句的执行计划,避免重复解析和优化过程,从而显著降低CPU开销。缓存机制的设计与使用也伴随着一些挑战,如内存占用…

作者头像 李华
网站建设 2026/4/19 12:46:27

电赛萌新看过来:用CCS调试MSP430F5529的完整流程与实战技巧

电赛萌新必备:MSP430F5529在CCS中的高效调试实战指南 全国大学生电子设计竞赛中,MSP430F5529凭借其超低功耗特性成为热门选择。但很多同学在硬件调试环节频频碰壁——程序明明在仿真器中运行正常,烧录到开发板却出现各种异常。本文将带你突破…

作者头像 李华
网站建设 2026/4/19 12:44:38

计算机网络的类型

一、按覆盖范围划分(最常用)1. 个人区域网覆盖范围:约1米到10米左右典型应用:连接个人设备,如手机、耳机、手表、键盘、鼠标常用技术:蓝牙、ZigBee、红外特点:不需要路由器,通常是一…

作者头像 李华
网站建设 2026/4/19 12:42:44

麦麦Bot:如何打造一个真正懂你的AI数字生命体

麦麦Bot:如何打造一个真正懂你的AI数字生命体 【免费下载链接】MaiBot MaiSaka, an LLM-based intelligent agent, is a digital lifeform devoted to understanding you and interacting in the style of a real human. She does not pursue perfection, nor does …

作者头像 李华