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

embedded/2025/3/19 20:04:45/

最近在学习大模型部署,需要安装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/embedded/173938.html

相关文章

MySQL 5.7 vs MySQL 8.0 高频面试题解析

一、基础概念与核心差异 1. 默认字符集的变化 问: MySQL 5.7 和 8.0 的默认字符集有何不同?为什么要修改? 答: MySQL 5.7 默认字符集为 latin1,可能导致中文乱码。MySQL 8.0 默认改为 utf8mb4(支持4字节…

深度探索DeepSeek部署的安全底线

摘要 在本地部署DeepSeek时,必须严格遵守安全底线。攻击者可能通过服务接口对DeepSeek模型数据进行篡改,包括删除模型或修改模型训练数据。此外,攻击者还可能注入恶意代码或删除关键组件,从而导致服务崩溃。因此,在部署…

【综述】An Introduction to Vision-Language Modeling【二】

介绍 第一节的内容 该文章对视觉语言模型进行介绍,解释了什么是视觉语言模型,怎么训练的,如果基于各种研究目标来有效评估它。这项工作不是一个现有工作的综述,而是对视觉语言模型进行清晰易理解的介绍,以便更好入门…

烽火HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包及注意点说明

之前发布过这个固件包,关于烽火HG680-KA/HG680-KB_海思HI3798MV310_安卓9.0_U盘强刷固件包详细说明一下,汇总总结一些常遇到的情况,这次固件会分开发布,以免混淆。 上一个帖子地址:烽火HG680-KA&#xff0…

OpenGL 将屏幕上的二维坐标转换为三维空间中的一个点

本文主要介绍将屏幕上的二维坐标转换为三维空间中的一个点,该点位于 近 平面上(即 Z 坐标为 -1)。 一、步骤概述 屏幕坐标到标准化设备坐标 (NDC): 将屏幕坐标 (x, y) 转换为 NDC 坐标系。NDC 到相机空间: 使用逆投影矩阵将 NDC 坐标转换到相…

实验篇| Nginx环境搭建-安全配置

在前面的文章里,阿祥详细介绍了在 Windows 系统中安装 Nginx 服务器的具体操作步骤,感兴趣的朋友可以参考:实验篇 | Nginx 反向代理 - 7 层代理 。完成 Nginx 的安装只是搭建 Web 服务的第一步,为了保障服务器的稳定运行以及数据安…

Python爬虫-爬取汽车之家燃油车月销量榜数据

前言 本文是该专栏的第48篇,后面会持续分享python爬虫干货知识,记得关注。 在本文中,笔者已整理18篇汽车平台相关的爬虫项目案例。对此感兴趣的同学,可以直接翻阅查看。 而本文,笔者将以汽车之家平台为例子。基于Python爬虫,实现批量爬取全部“燃油车”的月销量数据。废…

【面试中的分布式定时任务】

定时任务与分布式定时任务框架XXL-JOB详解 一、为什么需要定时任务? 定时任务在业务场景中非常常见,主要用于以下场景: 时间驱动处理: • 整点发送优惠券 • 每天更新收益 • 每天刷新标签数据和人群数据 批量处理数据&#xf…