Linux操作系统(三):详解Linux及2023年gcc/g++ 多版本间切换

news2024/10/6 6:00:12

目录

  • 1. Linux操作系统之Red hat与Centos
  • 2. 多个gcc/glibc版本的共存及指定gcc版本的编译
    • 2.1 如何确定cuda版本和gcc版本不适配
    • 2.2 cuda降级(不推荐)
    • 2.3 gcc多版本管理
    • 2.4 直接换一台服务器

1. Linux操作系统之Red hat与Centos

基于目前手头的Linux操作系统:

  1. 查看系统版本:cat /proc/version

    Linux version 3.10.0-1160.24.1.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Thu Apr 8 19:51:47 UTC 2021

    • 内核版本:3.10.0-1160.24.1.el7.x86_64
    • GCC(GNU Compiler Collection)版本:4.8.5 20150623 (Red Hat 4.8.5-44)
    • 发行日期:#1 SMP Thu Apr 8 19:51:47 UTC 2021。内核编译在2021年4月8日的19点51分47秒(UTC时区)编译的。
    • mockbuild@kbuilder.bsys.centos.org: 在 kbuilder.bsys.centos.org 这个服务器上使用 mockbuild 用户进行软件包的构建。  PS:在已部署的CentOS系统构建软件包可以实现自定义配置和依赖管理。后文说到的gcc/g++ 多版本间切换便属于依赖管理和自定义配置。

    在CentOS中进行软件包构建时,构建工具例如Mock会创建一个专门的用户帐户 mockbuild。这个用户帐户用于执行构建过程,以确保构建的安全性和隔离性。这样,如果构建过程中出现意外情况或者恶意软件,它不会对真实的系统产生影响,因为 mockbuild 用户没有超级用户权限。kbuilder.bsys.centos.org 是构建服务器的域名或主机名,用于标识构建过程所在的服务器。

  2. 为什么版本名称中既有Centos也有Red Hat

    • 系统名称查看cat /etc/redhat-release

      CentOS Linux release 7.9.2009 (Core)

      • 当前运行的CentOS Linux的主版本号是7,次版本号是9,修订号是2009。
    • CentOS 和 Red Hat关系

        CentOS是基于Red Hat Enterprise Linux(RHEL)的免费开源操作系统,它与RHEL兼容,并且主要通过移除商标和商业支持等元素来提供一个免费的替代版本。
        显然我手头的系统是CentOS7,使用的GCC编译器版本是4.8.5(这个也是CentOS7的默认gcc),在这个gcc版本号中包含了Red Hat 4.8.5-44的标识。但是,请注意,这个标识仅表示GCC编译器的发布和打包来源于Red Hat,而不是系统本身是Red Hat Linux。

2. 多个gcc/glibc版本的共存及指定gcc版本的编译

针对需求:不同version的cuda开发库使用的gcc版本不同。如果大模型需要的实验环境cuda版本不一样,在切换cuda版本后需要采用对应版本的gcc进行编译。
在这里插入图片描述
  “max supported GCC version” 表示CUDA所支持的最高GCC版本,即CUDA要求您使用不高于该版本的GCC编译器。CUDA通常是向下兼容的,这样做是为了确保CUDA代码可以在广泛的系统上编译和运行。

2.1 如何确定cuda版本和gcc版本不适配

  • 查询cuda版本nvcc --version

    Built on Tue_Sep_15_19:10:02_PDT_2020 (由NVIDIA在2020年9月15日(PDT时区)构建的)
    Cuda compilation tools, release 11.1, V11.1.74
    Build cuda_11.1.TC455_06.29069683_0
    (CUDA构建的详细信息,包含了特定构建版本的标识。)

    PS:nvidia-smi是NVIDIA系统管理器的命令行工具,用于查看GPU的状态和信息。它显示的是GPU驱动程序的版本信息,包括CUDA驱动版本。这台服务器CUDA Version: 11.2 ,但是Cuda compilation tools, release 11.1。实际上应该尽量确保所有的CUDA工具和驱动程序都是同一版本。这样可以避免版本不一致可能导致的问题。

  • 查询gcc版本gcc --version

    gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44)
    Copyright © 2015 Free Software Foundation, Inc.
    This is free software(GCC是自由软件,遵循GNU通用公共许可证(GNU General Public License,GPL)。自由软件意味着所有人都有权利查看、使用、复制、修改和传播该软件。); see the source for copying conditions. There is NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.( 免责声明。无论是商业性质还是适用于特定目的,都没有提供保证。这意味着使用GCC的风险和责任由用户自行承担。)

  • 在模型set_up时出现问题:RuntimeError: The current installed version of g++ (4.8.5) is less than the minimum required version by CUDA 11.1 (5.0.0). Please make sure to use an adequate version of g++ (>=5.0.0, <11.0).

  虽然但是,我在服务器上的部分python代码使用cuda可以正常运行。原因是使用的CUDA代码可能并不依赖于GCC编译器。有些CUDA代码是由NVIDIA提供的预编译的二进制代码,而不需要依赖于特定版本的GCC编译器。这些预编译的二进制代码通常可以在不同版本的GCC上正常运行。
  在服务器上通过python查看pytotch依赖的cuda版本:

Python 3.9.9 (main, Mar 7 2022, 14:19:54)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux

import torch; print(torch.version.cuda)

输出结果为11.7。许多GPU加速的库,包括PyTorch,通常会包含预编译的CUDA二进制代码,这些代码已经针对特定版本的CUDA进行了编译。因此,PyTorch的CUDA模块可能已经被编译为CUDA 11.7的版本,并且不直接依赖于系统上安装的GCC版本。预编译的CUDA二进制代码是为了跨平台兼容性和用户友好性。然而,为了获得最佳性能和稳定性,官方推荐使用与CUDA版本兼容的GCC编译器。

  通过这行代码可以查询预编译信息:

torch.__config__.show()
'PyTorch built with:\n  - GCC 9.3\n  - C++ Version: 201703\n  - Intel(R) Math Kernel Library Version 2017.0.1 Product Build 20161005 for Intel(R) 64 architecture applications\n  - Intel(R) MKL-DNN v2.7.3 (Git Hash 6dbeffbae1f23cbbeae17adb7b5b13f1f37c080e)\n  - OpenMP 201511 (a.k.a. OpenMP 4.5)\n  - LAPACK is enabled (usually provided by MKL)\n  - NNPACK is enabled\n  - CPU capability usage: AVX2\n  - CUDA Runtime 11.7\n  - NVCC architecture flags: -gencode;arch=compute_37,code=sm_37;-gencode;arch=compute_50,code=sm_50;-gencode;arch=compute_60,code=sm_60;-gencode;arch=compute_70,code=sm_70;-gencode;arch=compute_75,code=sm_75;-gencode;arch=compute_80,code=sm_80;-gencode;arch=compute_86,code=sm_86\n  - CuDNN 8.3.2  (built against CUDA 11.5)\n    - Built with CuDNN 8.5\n  - Magma 2.6.1\n  - Build settings: BLAS_INFO=mkl, BUILD_TYPE=Release, CUDA_VERSION=11.7, CUDNN_VERSION=8.5.0, CXX_COMPILER=/opt/rh/devtoolset-9/root/usr/bin/c++, CXX_FLAGS= -D_GLIBCXX_USE_CXX11_ABI=0 -fabi-version=11 -Wno-deprecated -fvisibility-inlines-hidden -DUSE_PTHREADPOOL -DNDEBUG -DUSE_KINETO -DLIBKINETO_NOROCTRACER -DUSE_FBGEMM -DUSE_QNNPACK -DUSE_PYTORCH_QNNPACK -DUSE_XNNPACK -DSYMBOLICATE_MOBILE_DEBUG_HANDLE -O2 -fPIC -Wall -Wextra -Werror=return-type -Werror=non-virtual-dtor -Werror=bool-operation -Wnarrowing -Wno-missing-field-initializers -Wno-type-limits -Wno-array-bounds -Wno-unknown-pragmas -Wunused-local-typedefs -Wno-unused-parameter -Wno-unused-function -Wno-unused-result -Wno-strict-overflow -Wno-strict-aliasing -Wno-error=deprecated-declarations -Wno-stringop-overflow -Wno-psabi -Wno-error=pedantic -Wno-error=redundant-decls -Wno-error=old-style-cast -fdiagnostics-color=always -faligned-new -Wno-unused-but-set-variable -Wno-maybe-uninitialized -fno-math-errno -fno-trapping-math -Werror=format -Werror=cast-function-type -Wno-stringop-overflow, LAPACK_INFO=mkl, PERF_WITH_AVX=1, PERF_WITH_AVX2=1, PERF_WITH_AVX512=1, TORCH_DISABLE_GPU_ASSERTS=ON, TORCH_VERSION=2.0.0, USE_CUDA=ON, USE_CUDNN=ON, USE_EXCEPTION_PTR=1, USE_GFLAGS=OFF, USE_GLOG=OFF, USE_MKL=ON, USE_MKLDNN=ON, USE_MPI=OFF, USE_NCCL=1, USE_NNPACK=ON, USE_OPENMP=ON, USE_ROCM=OFF, \n'
  • GCC版本:GCC 9.3
    PyTorch编译时所使用的GCC编译器的版本是9.3。

  • C++版本:C++ Version: 201703
    C++编译器版本是201703,表示使用C++17标准进行编译。

  • CUDA版本:CUDA Runtime 11.7
    PyTorch编译时所使用的CUDA版本是11.7。

  • CuDNN版本:CuDNN 8.3.2 (built against CUDA 11.5), Built with CuDNN 8.5
    PyTorch编译时使用了CuDNN版本8.3.2,该版本是针对CUDA 11.5构建的,并且编译时还使用了CuDNN版本8.5。

  • CPU能力:CPU capability usage: AVX2
    PyTorch编译时启用了CPU的AVX2指令集优化。

  • 使用的其他库:NNPACK、LAPACK、Magma等
    编译时启用了NNPACK(用于CPU优化)、LAPACK(通常由MKL提供)和Magma等库。

然而,对于没有预编译的模型,需要考虑版本兼容,否则会在模型set_up时报错:

RuntimeError: The current installed version of g++ (4.8.5) is less than the minimum required version by CUDA 11.1 (5.0.0). Please make sure to use an adequate version of g++ (>=5.0.0, <11.0).

2.2介绍通过cuda降级实现编译。2.3通过cuda、gcc多版本管理实现编译。

2.2 cuda降级(不推荐)

GCC 4.8.5最多兼容的CUDA版本是10.2。要使用更高版本的CUDA,需要升级GCC。

Cuda升级、降级操作

有些模型要求在cuda降级后就无法编译成功了。比如Grounding-DINO,官方建议的版本为cuda-11.3。

2.3 gcc多版本管理

  在Linux系统中,升级默认的GCC并不推荐!因为系统可能依赖于特定版本的GCC来编译和运行一些软件包和组件。更改默认的GCC版本后可能会导致一些软件出现兼容性问题。
  该部分参考CentOS 管理多版本gcc,本人已经配置过yum源,所以下面两步即可:

  1. 安装GCC 9.4和相关的开发工具:
sudo yum install centos-release-scl
sudo yum install devtoolset-9
  1. 启用GCC 9.4环境:
sudo dnf install gcc-toolset-9

启用sudo dnf install gcc-toolset-9只是在系统中安装了GCC 9,并通过gcc-toolset-9的软件包来提供对GCC 9的访问。但这不会自动使得Python在使用CUDA编译后自动使用正确的GCC版本。

创建一个新的python虚拟环境并指定CC=gcc-9 CXX=g+±9 virtualenv -p /home/---------/python3.9/Python-3.9.9/python GroundingDINO 即可。

2.4 直接换一台服务器

  恰好还有一台服务器,ubuntu系统20.04默认gcc为9.4.0,系统安装了与CUDA 11.7兼容的NVIDIA驱动程序。所以安装一个cuda-11.7然后重新配置一个新的虚拟环境即可。
cat /proc/version :Linux version 5.4.0-146-generic (buildd@lcy02-amd64-026) (gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.1)) #163-Ubuntu SMP Fri Mar 17 18:26:02 UTC 2023
nvcc --version :cuda-11.7,安装新cuda编译器可以参考Linux (Ubuntu)安装 cuda 11.7
source/home/paresaw/axy/Envs/GroundingDINO/bin/activate激活 :Python 3.9.17

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/831565.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二、搜索与图论6:Dijkstra 模板题+算法模板(Dijkstra求最短路 I, Dijkstra求最短路 II,1003 Emergency)

文章目录 算法模板Dijkstra题目代码模板朴素dijkstra算法堆优化版dijkstra 树与图的存储(1) 邻接矩阵&#xff1a;(2) 邻接表&#xff1a;关于e[],ne[],h[]的理解 关于堆的原理与操作 模板题Dijkstra求最短路 I原题链接题目思路题解 Dijkstra求最短路 II原题链接题目思路题解 1…

cpolar内网穿透可应用于哪些场景?

前言 &#x1f4d5;作者简介&#xff1a;热爱跑步的恒川&#xff0c;致力于C/C、Java、Python等多编程语言&#xff0c;热爱跑步&#xff0c;喜爱音乐的一位博主。 &#x1f4d7;本文收录于恒川的日常汇报系列&#xff0c;大家有兴趣的可以看一看 &#x1f4d8;相关专栏C语言初…

RGB颜色值与十六进制颜色码对照表(超详细)

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

VGG卷积神经网络-笔记

VGG卷积神经网络-笔记 VGG是当前最流行的CNN模型之一&#xff0c; 2014年由Simonyan和Zisserman提出&#xff0c; 其命名来源于论文作者所在的实验室Visual Geometry Group。 测试结果为&#xff1a; 通过运行结果可以发现&#xff0c;在眼疾筛查数据集iChallenge-PM上使用VGG…

maven发布到中央仓库

创建账号 https://issues.sonatype.org 【第二步】登录申请新项目 右上角点击Create&#xff0c;Project选择第一项&#xff0c;有的时候带不出来第二个New Project&#xff0c;可以再选一次Project的选项。

warning Replace `‘vue‘` with `“vue“;`

warning Replace vue with "vue"; 如果报以上错误 不要怀疑直接找 .eslintrc 元凶就是他 方法一 在配置关闭eslint语法检测 在vite.config.ts文件中 方法二 适用于项目中不得不依赖 eslint 进行配置结尾换行符&#xff0c;那么就会直接在开发环境中进行验证。…

面向对象程序三大特性一:多态(超详细)

目录 1.重写 1.1基本语法规则 1.2规则深化 1.3重写与重载的区别 2.向上转型 2.1简单介绍 2.3向上转型的作用 3.向下转型 3.1介绍 3.2instanceof 基本介绍 4.多态 4.1多态实现条件 4.2避免在构造方法中调用重写的方法 1.重写 重写 (override) &#xff1a;也称为覆…

数据库导出Excel格式的表结构

数据库导出Excel格式的表结构 你是否遇到到导出数据库里面的表结构&#xff0c;包含字段名称、类型、长度、小数、默认值、字段描述之类的需求&#xff1b;当我们去navcat里面找时发现没有&#xff0c;因为navcat没有提供这一功能&#xff0c;他只可以导出表结构的sql&#xff…

一百四十、海豚调度器——海豚删除无法直接删除的工作流

一、目的 海豚调度器有时会遇到无法直接删除的工作流&#xff0c;一旦直接删除就会报错&#xff1a; 批量删除工作流实例错误: 218 二、解决方法 (一)打开MySQL的dolphinscheduler数据库的表t_ds_process_definition &#xff08;二&#xff09;根据报错的工作流名称hive_ba…

上海亚商投顾:沪指震荡微涨 金融、地产午后大幅走强

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 市场情绪 三大指数早盘震荡&#xff0c;午后集体拉升反弹&#xff0c;创业板指涨超1%。券商等大金融板块午后再度走强&#…

C语言多级指针

#include "stdio.h" #include <stdlib.h>int main() {int a 10;//*p int a int *pint* p &a;int** q &p;//int** q int *(*q) int *(q) a//int**q int*(*q) int*(&a) int*&a aint*** k &q;//分析&#xff1a;首先k是个变量&…

HDFS介绍

目录 ​编辑 一、HDFS基础 1.1 概述 1.2 HDFS的设计目标 1.2.1 硬件故障 1.2.2 流式数据访问 1.2.3 超大数据集 1.2.4 简单的一致性模型 1.2.5 移动计算而不是移动数据 1.2.6 跨异构硬件和软件平台的可移植性 1.3 基础概念 1.3.1 块&#xff08;Block&#xff09; 1.3.2 复制…

【智慧校园】智慧班牌解决方案

【智慧校园】智慧班牌全套源码 智慧校园saas云平台系统 前后端分离架构 1、使用springboot框架Javavue2 2、数据库MySQL5.7 3、移动端小程序使用小程序原生语言开发 4、电子班牌固件安卓7.1&#xff1b;使用Java Android原生 5、elmentui &#xff0c;Quartz&#xff0c;jpa&a…

MyBatis的动态SQL语句

文章目录 前言LocalDate数据库代码po 包 ifwhere 标签 查trim 标签 增set 标签 改foreach 标签 删 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 查询条件是动态的 MyBatis的动态SQL语句是指在运行时根据不同条件选择不同的SQL语句执行。 这些条件可…

华为OD机试真题 Java 实现【阿里巴巴找黄金宝箱(IV)】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 七、复杂度分析1、时间复杂度2、空间复杂度 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAV…

CAD随机球体颗粒过渡区3D插件

插件介绍 CAD随机球体颗粒&过渡区3D插件可用于在AutoCAD软件内生成随机分布的球体及球体外侧过渡区部件&#xff0c;适用于科研绘图、有限元建模如混凝土细观、颗粒增强复合材料、随机三维骨料及过渡区等方面的应用。 插件可指定的参数有模型的长、宽、高&#xff1b;球…

批处理文件的@echo off是什么意思?

echo off 关闭回显 echo on 打开回显 echo off并不是DOS程序中的&#xff0c; 而是DOS批处理中的。 当年的DOS&#xff0c;所有操作都用键盘命令来完成&#xff0c; 当你每次都要输入相同的命令时&#xff0c; 可以把这么多命令存为一个批处理&#xff0c; 从此以后&#xff…

MybatisPlus的QueryWrapper方法解释

QueryWrapper继承AbstractLambdaWrapper 继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件以及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取. 一些用法 常规 queryWrapper.lt&#xff08;&#xff09;——小于queryWrapper.le…

揭开接口自动化测试的神秘面纱,从入门到高级实战

接口测试背景和必要性 接口测试是测试系统组件间接口&#xff08;API&#xff09;的一种测试&#xff0c;主要用于检测内部与外部系统、内部子系统之间的交互质量&#xff0c;其测试重点是检查数据交换、传递的准确性&#xff0c;控制和交互管理过程&#xff0c;以及系统间相互…

vue3引用Font-Awesome字体图标库

环境&#xff1a;vue3tsviteelement plus 介绍&#xff1a;这里安装引用的是Font-Awesome 6.x 版本&#xff0c;有专业版&#xff08;付费&#xff09;&#xff0c;这里只介绍免费版字体使用方法 一、安装 1.使用npm安装&#xff0c;终端打开项目目录或者命令行cd到目录文件夹…