【机器学习】基于conda虚拟环境的gcc、g++版本升级

ops/2025/3/19 18:30:04/

最近在学习大模型部署,需要安装flash-attn,在编译时报错

c++: error: unrecognized command line option ‘-std=c++17’

centos7.9默认gcc最高版本为4.8.5

(base) [root@xx ~]# cat /proc/version
Linux version 3.10.0-1160.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC) ) #1 SMP Mon Oct 19 16:18:59 UTC 2020

以上报错需要高版本的gcc支持,所以需要升级GCC的版本,对应关系参考
GCC版本对C++的支持情况
这里选择9.0版本进行升级。
网上搜索教程,多是 基于centos yun 安装替换方式,比较复杂,该文章基于conda虚拟环境来进行升级,操作简单,对原系统侵入少。

conda_19">激活conda环境

conda是python的解释器环境,可以隔离不同的python解释环境,可以自动拉取环境所需的包,屏蔽了虚拟机底层的差异,避免了频繁的更换安装python解释器

所以我们选择在conda环境升级gcc、g++版本,来支撑这个环境下的编译工作。

#激活环境
conda activate ktransformers
#查看gcc可安装的版本
conda search gcc
# 查看g++可安装版本
conda search gxx

在这里插入图片描述
在这里插入图片描述

可以看到版本很多,这里选择gcc-linux-64=9.3.0,gxx-linux-64=9.3.0版本

安装gcc 、g++

# 安装gcc
conda install gcc_linux-64=9.3.0
# 安装gxx
conda install gxx_linux-64=9.3.0

会被安装到这个路径(你自己conda虚拟环境的目录,这里是ktransformers)

environment location: /home/xxx//envs/ktransformers

# 查看安装版本(conda下安装的gcc不叫gcc了,叫x86_64-conda-linux-gnu-cc)
x86_64-conda-linux-gnu-cc -v
# 查看gxx安装版本
x86_64-conda-linux-gnu-c++ -v
(ktransformers) [root@yd-ss ~]# x86_64-conda-linux-gnu-cc -v
Reading specs from /home/xxx//envs/ktransformers/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/specs
COLLECT_GCC=x86_64-conda-linux-gnu-cc
COLLECT_LTO_WRAPPER=/home/xxx//envs/ktransformers/bin/../libexec/gcc/x86_64-conda-linux-gnu/9.3.0/lto-wrapper
Target: x86_64-conda-linux-gnu
Configured with: /home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/src/gcc/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=x86_64-conda-linux-gnu --prefix=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/gcc_built --with-sysroot=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/gcc_built/x86_64-conda-linux-gnu/sysroot --enable-languages=c,c++,fortran,objc,obj-c++ --with-pkgversion='crosstool-NG 1.24.0.133_b0863d8_dirty' --enable-__cxa_atexit --disable-libmudflap --enable-libgomp --disable-libssp --enable-libquadmath --enable-libquadmath-support --enable-libsanitizer --enable-libmpx --with-gmp=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --with-mpfr=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --with-mpc=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --with-isl=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-gold --disable-nls --disable-multilib --with-local-prefix=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/gcc_built/x86_64-conda-linux-gnu/sysroot --enable-long-long --enable-default-pie
Thread model: posix
gcc version 9.3.0 (crosstool-NG 1.24.0.133_b0863d8_dirty)
/envs/ktransformers/bin(ktransformers) [root@yd-ss bin]# x86_64-conda-linux-gnu-c++ -v
Reading specs from /home/xxx//envs/ktransformers/bin/../lib/gcc/x86_64-conda-linux-gnu/9.3.0/specs
COLLECT_GCC=x86_64-conda-linux-gnu-c++
COLLECT_LTO_WRAPPER=/home/xxx//envs/ktransformers/bin/../libexec/gcc/x86_64-conda-linux-gnu/9.3.0/lto-wrapper
Target: x86_64-conda-linux-gnu
Configured with: /home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/src/gcc/configure --build=x86_64-build_pc-linux-gnu --host=x86_64-build_pc-linux-gnu --target=x86_64-conda-linux-gnu --prefix=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/gcc_built --with-sysroot=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/gcc_built/x86_64-conda-linux-gnu/sysroot --enable-languages=c,c++,fortran,objc,obj-c++ --with-pkgversion='crosstool-NG 1.24.0.133_b0863d8_dirty' --enable-__cxa_atexit --disable-libmudflap --enable-libgomp --disable-libssp --enable-libquadmath --enable-libquadmath-support --enable-libsanitizer --enable-libmpx --with-gmp=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --with-mpfr=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --with-mpc=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --with-isl=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/.build/x86_64-conda-linux-gnu/buildtools --enable-lto --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --enable-threads=posix --enable-target-optspace --enable-plugin --enable-gold --disable-nls --disable-multilib --with-local-prefix=/home/builder/ktietz/cos6/ci_cos6/ctng-compilers_1622658800915/work/gcc_built/x86_64-conda-linux-gnu/sysroot --enable-long-long --enable-default-pie
Thread model: posix
gcc version 9.3.0 (crosstool-NG 1.24.0.133_b0863d8_dirty)

可以看到已安装成功。

但是这名字系统是无法识别的,所以需要建立软连接,进行改名

# 进入ktransformers虚拟环境目录下 /home/xxx//envs/ktransformers/bin
ln -s ./x86_64-conda-linux-gnu-cc ./gcc
ln -s ./x86_64-conda-linux-gnu-c++ ./g++

再次测试版本,在/home/xxx//envs/ktransformers/bin目录下

./gcc -v
./g++ -v

发现已变成9.3.0

但是仅仅在目录下才能生效,在其他地方读的还是旧的版本,需要配置该新版本的环境变量,路径即指向,conda虚拟环境中安装的这个版本

# conda 环境的gcc 9.3.0 g++ 9.3.0
export PATH=/home/xxx//envs/ktransformers/bin/:$PATH
# 生效
source /etc/profile

再次查看版本,发现成功变成了9.3.0.这就是conda的神奇方便之处。

如果后续需要把gcc版本改回去,就直接去掉环境变量配置即可。

若想更换其他版本的gcc,按以上步骤操作即可。


http://www.ppmy.cn/ops/167082.html

相关文章

排错 -- FISCO BCOS区块链网络 -- 3. 编译智能合约

文章为FISCO BCOS2.0搭建区块链平台中发现的问题与总结,出错原因不唯一 ,解决办法不唯一 目前社区缺少完整,稳定的搭建平台和教程 ,欢迎各位及时补充,如有错误请及时评论纠正! 感谢各位搜索到这里&#…

【STM32】从新建一个工程开始:STM32 新建工程的详细步骤

STM32 开发通常使用 Keil MDK、STM32CubeMX、IAR 等工具来创建和管理工程。此处是 使用 Keil MDK5 STM32CubeMX 创建 STM32 工程的详细步骤。 新建的标准库工程文件已上传至资源中,下载后即可直接使用。 标准库新建 STM32 工程的基本目录结构:STD_STM…

Vue3中正确解析RefImpl对象

在 Vue 3 中,当你看到 RefImpl 对象时,说明这是一个通过 ref() 创建的响应式引用。要获取它的实际值,直接访问 .value 属性即可。以下是具体方法: 直接获取值(标准方式) javascript 复制 console.log(&q…

【蓝桥杯】每天一题,理解逻辑(4/90)【Leetcode 二进制求和】

题目描述 我们解析一下题目 我们可以理解到两个主要信息 给的是二进制的字符串返回他们的和 我们知道,十进制的加减法需要进位,例如:9716是因为91之后进了一位,二进制也是如此,只不过十进制是逢10进1,二…

Go string 字符串底层逻辑

在 Go 语言中,string 类型的底层结构是一个结构体,包含两个字段:一个指向字节数组的指针和该字节数组的长度。以下是其在 Go 源码中的大致定义:type stringStruct struct {str unsafe.Pointerlen int } str:这是一个指…

Git的基本指令

一、回滚 1.git init 在项目文件夹中打开bash生成一个.git的子目录,产生一个仓库 2.git status 查看当前目录下的所有文件的状态 3.git add . 将该目录下的所有文件提交到暂存区 4.git add 文件名 将该目录下的指定文件提交到暂存区 5.git commit -m 备注信…

R语言入门课| 02 R及Rstudio的下载与安装

视频教程 先上教程视频,B站同步播出: https://www.bilibili.com/video/BV1miNVeWEkw 完整视频回放可见:R语言入门课回放来啦 "R语言入门课"是我们认为生信小白入门不得不听的一个课程,我们也为这个课程准备了许多干…

ffmpeg基础整理

FFmpeg 是一个开源的跨平台 多媒体处理工具 ,可以用于 录制、转换、编辑、流式传输 音视频文件。它支持几乎所有常见的音视频格式,功能极其强大,是开发者、视频创作者常用的命令行工具。 一、FFmpeg 核心功能 格式转换:将视频/音频…