文章主题:根据文章内容,以下是三个关键词: 构建本地知识库, GPT语言模型, 聊天机器人
前言
在之前的讨论中,我们已经深入探讨了几款用于构建本地知识库的开源项目。它们的运作原理主要基于利用本地文件来创建向量数据库的方法,并通过调用现有的GPT语言模型进行向量相似度计算。这种设计使得利用GPT语言模型的能力构建自己的应用程序或将其集成到现有产品中变得极为便捷,从而 potentially开拓出巨大的市场空间。
接下来,针对那些涉及机密信息或安全级别较高的企业和单位,我们希望能够在不 compromising 数据安全的前提下,充分利用大语言模型的优势。为此,我们建议构建企业级别的本地私有化模型,并在此基础上开发出各类 GPT 产品,例如聊天机器人、智能客户服务等。
在经过了一系列的选型,尝试,对比之后,像LLaMa和GPT4ALL之类的开源模型目前对中文的支持不不够友好,另外参数量也比较小,最终发现清华大学开源的一款ChatGPT-6B模型,最关键的问题,对中文支持比较友好,也可以上传数据集自己进行模型微调,最重要的是可以支持在消费级的显卡上运行,当然了,要是实际使用还是建议选择一台具备AI算力的服务器来部署,显存至少25G以上,在没有服务器的条件下,建议使用Colab,并启用GPU A100。
二、产品介绍
2.1、GLM:预训练模型
GLM的出发点是将3种主流的预训练模型进行统一:
GPT的训练目标是从左到右的文本生成BERT的训练目标是对文本进行随机掩码,然后预测被掩码的词T5则是接受一段文本,从左到右的生成另一段文本2.2、开源GLM系列
GLM Github Paper(https://github.com/THUDM/GLM)
GLM-130B GitHub论文(https://arxiv.org/abs/2210.02414)是近年来自然语言处理领域的一项重要研究成果。该研究由我国清华大学 KEG 实验室与智谱 AI 共同完成,提出了一种名为GLM-130B的预训练语言模型。这种模型采用了独特的双向注意力机制,能够更好地捕捉上下文信息,从而在各种自然语言理解任务中取得更好的表现。在GLM-130B模型中,作者将词向量与句子级信息相结合,通过预先训练来学习语言模式。这种方法有效地提高了模型的泛化能力,使其在多种自然语言处理任务上都取得了令人瞩目的成绩。具体而言,GLM-130B模型在机器翻译、文本摘要、情感分析等任务中都取得了最先进水平的表现。此外,GLM-130B模型还具有良好的可扩展性,可以轻松地应用于大规模数据集。这使得该模型在实际应用中具有很高的价值。总的来说,GLM-130B GitHub论文为自然语言处理领域带来了新的思路和方法,有望推动该领域的发展。
ChatGLM-6B 博客(https://chatglm.cn/blog)
可以在消费级的GPU上进行微调
2.3、功能演示
2.4、ChatGLM-6B
由清华大学知识工程 (KEG) 实验室和智谱AI公司与于2023年共同训练的语言模型
ChatGLM-6B在设计上借鉴了ChatGPT的思路,并在千亿基座模型GLM-130B中融入了代码预训练技术。通过有监督微调等方法,实现了与人类意图的紧密 align,也就是让机器的回答更加贴合人类的期望和价值观。
ChatGLM-6B 是一款拥有 620 亿参数的中英双语语言模型,其基础技术同 ChatGLM(chatglm.cn)保持一致。这款模型的出现,让中文问答和对话功能得以初步实现,同时它也具备在单张 2080Ti 显卡上进行推理使用的功能。
在训练模型方面,ChatGPT需要用到1万张100显卡,而ChatGLM-6B却能单机运行在消费级显卡上,其可运行的GPU数量达到13G,甚至建议使用16-24G的显卡。这使得ChatGLM-6B在未来有着广阔的使用空间。
具体来说,ChatGLM-6B 有如下特点:
充分的中英双语预训练: ChatGLM-6B 在 1:1 比例的中英语料上训练了 1T 的 token 量,兼具双语能力。优化的模型架构和大小: 吸取 GLM-130B 训练经验,修正了二维 RoPE 位置编码实现,使用传统FFN结构。6B(62亿)的参数大小,也使得研究者和个人开发者自己微调和部署 ChatGLM-6B 成为可能。较低的部署门槛: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的显存进行推理,结合模型量化技术,这一需求可以进一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消费级显卡上。更长的序列长度: 相比 GLM-10B(序列长度1024),ChatGLM-6B 序列长度达 2048,支持更长对话和应用。人类意图对齐训练: 使用了监督微调(Supervised Fine-Tuning)、反馈自助(Feedback Bootstrap)、人类反馈强化学习(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人类指令意图的能力。输出格式为 markdown,方便展示。ChatGLM-6B 在一定条件下展现出了优秀的对话和问答能力,这得益于其强大的语言理解和生成能力。然而,ChatGLM-6B 仍然存在着许多已知 limitations 和缺陷。
模型容量较小: 6B 的小容量,决定了其相对较弱的模型记忆和语言能力。在面对许多事实性知识任务时,ChatGLM-6B 可能会生成不正确的信息;她也不擅长逻辑类问题(如数学、编程)的解答。可能会产生有害说明或有偏见的内容:ChatGLM-6B 只是一个初步与人类意图对齐的语言模型,可能会生成有害、有偏见的内容。较弱的多轮对话能力:ChatGLM-6B 的上下文理解能力还不够充分,在面对长答案生成,以及多轮对话的场景时,可能会出现上下文丢失和理解错误的情况。英文能力不足:训练时使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示时,回复的质量可能不如中文指示的回复,甚至与中文指示下的回复矛盾。易被误导:ChatGLM-6B 的“自我认知”可能存在问题,很容易被误导并产生错误的言论。例如当前版本模型在被误导的情况下,会在自我认知上发生偏差。即使该模型经过了1万亿标识符(token)左右的双语预训练,并且进行了指令微调和人类反馈强化学习(RLHF),但是因为模型容量较小,所以在某些指示下可能会产生有误导性的内容。2.5、ChatGLM-130B
2022年8月,智谱AI基于GLM框架,推出1300亿参数的中英双语稠密模型GLM-130B,综合能力与GPT3相当 内存节省75%,可在单台3090 (4)或单台2080(8)进行无损推理 高速推理,比Pytorch提升7-8倍速度
跨平台,支持不同计算平台的适配和应用
在其设计过程中,ChatGLM参考了ChatGPT的先进理念,并在GLM-130B1这个千亿基座模型中融入了代码预训练技术。这种方法使得有监督微调(Supervised Fine-Tuning)等手段得以实现,从而使人类意图能够更好地与模型对齐。值得注意的是,ChatGLM现行的版本中,模型的性能提升主要得益于其独具特色的千亿基座模型GLM-130B。这个模型与BERT、GPT-3以及T5等架构有着明显的区别,它是一个包含多目标函数的自回归预训练模型。继2022年8月之后,我们将GLM-130B1这个拥有1300亿参数的中英双语稠密模型向研究和工业领域公开。这个模型具有诸多独特优势,值得我们深入研究和探讨。
双语: 同时支持中文和英文。高精度(英文): 在公开的英文自然语言榜单 LAMBADA、MMLU 和 Big-bench-lite 上优于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。高精度(中文): 在7个零样本 CLUE 数据集和5个零样本 FewCLUE 数据集上明显优于 ERNIE TITAN 3.0 260B 和 YUAN 1.0-245B。快速推理: 首个实现 INT4 量化的千亿模型,支持用一台 4 卡 3090 或 8 卡 2080Ti 服务器进行快速且基本无损推理。可复现性: 所有结果(超过 30 个任务)均可通过我们的开源代码和模型参数复现。跨平台: 支持在国产的海光 DCU、华为昇腾 910 和申威处理器及美国的英伟达芯片上进行训练与推理。三、系统部署
3.1、硬件要求
在无量化的情况下,显存初始化基本上都需要13G内存,16G的显存可能对话两轮就内存爆满了,个人部署建议还是使用量化模型。
3.2、系统环境
操作系统:CentOS 7.6 (内存:32G)显卡配置: 2x NVIDIA Gefore 3070Ti 8G (共16G显存)Python 3.8.13 (版本不要高于3.10,否则有些依赖无法下载,像paddlepaddle 2.4.2在高版本Python还不支持)# 安装Python3.8所需依赖 sudo yum -y install gcc zlib zlib-devel openssl-devel # 下载源码 wget https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tgz # 解压缩 tar -zxvf Python-3.8.13.tgz # 编译配置,注意:不要加 –enable-optimizations 参数 ./configure –prefix=/usr/local/python3 # 编译并安装 make && make install3.3、部署ChatGLM 6B
3.3.1、下载源码
git clone https://github.com/imClumsyPanda/langchain-ChatGLM.git cd langchain-ChatGLM3.3.2、配置Python虚拟环境
确认您已经安装了 Python 3.8.13,可以在终端或命令行中输入 python3 -V 来检查。python3.8 -m venv env38其中 env38 是您为该虚拟环境取的名字,可以根据需要自行更改。
激活虚拟环境。在终端或命令行中输入 source env38/bin/activate(Mac/Linux) 或 env38\Scripts\activate.bat(Windows)激活虚拟环境。# 激活虚拟环境 source env38/bin/activate # 升级pip到最新版本 pip install –upgrade pip在虚拟环境中安装所需的 Python 包和依赖项。可以使用 pip 命令来安装,例如 pip install numpy。当您完成所有操作后,可以使用 deactivate 命令退出虚拟环境。注意:为了不影响全局的Python环境,建议后续所有的操作都在Python的虚拟环境中执行,终端中显示(myenv)你的虚拟环境名称就代表你当前切入的虚拟环境。3.3.3、设置国内镜像源
为了构建依赖更快一点,我们可以使用阿里云的镜像源进行下载
如果你在国内使用pip安装缓慢,可以考虑切换至阿里镜像源:pip config set global.index-url
https://mirrors.aliyun.com/pypi/simple/镜像同步版本可能不及时,如果出现这种情况建议切换至官方源:pip config set global.index-url https://pypi.org/simple
3.3.4、安装依赖
# 项目中 pdf 加载由先前的 detectron2 替换为使用 paddleocr,如果之前有安装过 detectron2 需要先完成卸载避免引发 tools 冲突 $ pip uninstall detectron2 # 检查paddleocr依赖,linux环境下paddleocr依赖libX11,libXext $ yum install libX11 $ yum install libXext # 安装依赖 pip install -r requirements.txt # 如果没有设置pip的下载镜像,也可以直接用-i参数指定镜像源地址 # pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/3.3.5、安装Git LFS
因为模型文件较大,如果你的网络环境较差,下载模型参数可能会花费较长时间甚至失败。此时可以先将模型下载到本地,然后从本地加载。Git下载大文件需要安装Git LFS
# 下载Git LFS安装文件 wget -O git-lfs-3.3.0–1.el7.x86_64.rpm https://d28dx6y1hfq314.cloudfront.net/1358/1665/el/7/package_files/2361926.rpm?t=1685358605_8973d6064d1793877554bc4a45dd68c5388da3eb # 设置文件执行权限 chmod +xgit-lfs-3.3.0–1.el7.x86_64.rpm # 通过yum命令安装 yum install git-lfs-3.3.0–1.el7.x86_64.rpm # 验证Git LFS是否安装成功 git-lfs/3.3.0 (GitHub; linux amd64; go 1.19.3; git 77deabdf)3.3.6、下载模型
1)选项1:从 Hugging Face Hub 下载
模型需要先安装Git LFS,然后克隆下载运行(由于访问HuggingFace网络不稳定,仓库文件过大会出现抖动,下载失败的情况)
# 下载 LLM 模型 git clone https://huggingface.co/THUDM/chatglm-6b /your_path/chatglm-6b # 下载 Embedding 模型 git clone https://huggingface.co/GanymedeNil/text2vec-large-chinese /your_path/text2vec # 模型需要更新时,可打开模型所在文件夹后拉取最新模型文件/代码 git pull由于文件太大,如果从Huggingface网站上下载失败的,可以考虑用从清华的镜像下载或者百度网盘进行下载:
2)选项2:手动下载 当从huggingface repo下载的速度很慢时,可以使用这个方法
第1步:克隆 repo,跳过大文件
第2步:从清华云下载模型文件大文件,一个一个地下载是很麻烦的,注意下载完模型后需要与前面HuggingFace克隆下来的项目进行合并。
为了解决网络问题和一个个下载繁琐的问题,langchain-chatglm为大家提供了从百度网盘下载的方式。
#清华镜像下载地址: https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2F&mode=list – chatglm-6b:https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2Fchatglm-6b&mode=list – chatglm-6b-int4:https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2Fchatglm-6b-int4&mode=list – chatglm-6b-int8:https://cloud.tsinghua.edu.cn/d/674208019e314311ab5c/?p=%2Fchatglm-6b-int8&mode=list – text2vec-large-chinese:https://huggingface.co/GanymedeNil/text2vec-large-chinese#百度网盘下载地址: – ernie-3.0-base-zh.zip 链接: [https://pan.baidu.com/s/1CIvKnD3qzE-orFouA8qvNQ?pwd=4wih](https://pan.baidu.com/s/1CIvKnD3qzE-orFouA8qvNQ?pwd=4wih) – ernie-3.0-nano-zh.zip 链接: [https://pan.baidu.com/s/1Fh8fgzVdavf5P1omAJJ-Zw?pwd=q6s5](https://pan.baidu.com/s/1Fh8fgzVdavf5P1omAJJ-Zw?pwd=q6s5) – text2vec-large-chinese.zip 链接: [https://pan.baidu.com/s/1sMyPzBIXdEzHygftEoyBuA?pwd=4xs7](https://pan.baidu.com/s/1sMyPzBIXdEzHygftEoyBuA?pwd=4xs7) – chatglm-6b-int4-qe.zip 链接: [https://pan.baidu.com/s/1DDKMOMHtNZccOOBGWIOYww?pwd=22ji](https://pan.baidu.com/s/1DDKMOMHtNZccOOBGWIOYww?pwd=22ji) – chatglm-6b-int4.zip 链接: [https://pan.baidu.com/s/1pvZ6pMzovjhkA6uPcRLuJA?pwd=3gjd](https://pan.baidu.com/s/1pvZ6pMzovjhkA6uPcRLuJA?pwd=3gjd) – chatglm-6b.zip 链接: [https://pan.baidu.com/s/1B-MpsVVs1GHhteVBetaquw?pwd=djay](https://pan.baidu.com/s/1B-MpsVVs1GHhteVBetaquw?pwd=djay)3.3.7、模型配置
模型下载完成后,请在 configs/model_config.py 文件中,对 embedding_model_dict 和 llm_model_dict 参数进行修改。
embedding_model_dict = { “ernie-tiny”: “nghuyong/ernie-3.0-nano-zh”, “ernie-base”: “nghuyong/ernie-3.0-base-zh”, “text2vec-base”: “shibing624/text2vec-base-chinese”, “text2vec”: “/your_path/text2vec-large-chinese”, } # supported LLM models # llm_model_dict 处理了loader的一些预设行为,如加载位置,模型名称,模型处理器实例 llm_model_dict = { “chatglm-6b-int4-qe”: { “name”: “chatglm-6b-int4-qe”, “pretrained_model_name”: “THUDM/chatglm-6b-int4-qe”, “local_model_path”: None, “provides”: “ChatGLM” }, “chatglm-6b-int4”: { “name”: “chatglm-6b-int4”, “pretrained_model_name”: “/your_path/chatglm-6b-int4”, “local_model_path”: None, “provides”: “ChatGLM” }, “chatglm-6b-int8”: { “name”: “chatglm-6b-int8”, “pretrained_model_name”: “/your_path/chatglm-6b-int8”, “local_model_path”: None, “provides”: “ChatGLM” }, “chatglm-6b”: { “name”: “chatglm-6b”, “pretrained_model_name”: “/your_path/chatglm-6b”, “local_model_path”: None, “provides”: “ChatGLM” }, “chatyuan”: { “name”: “chatyuan”, “pretrained_model_name”: “ClueAI/ChatYuan-large-v2”, “local_model_path”: None, “provides”: None }, “moss”: { “name”: “moss”, “pretrained_model_name”: “fnlp/moss-moon-003-sft”, “local_model_path”: None, “provides”: “MOSSLLM” } }四、系统启动
4.1、Web 模式启动
pip install gradio python webui.py启动完成后如下图所示,如在启动过程中遇到问题可以查阅官方仓库中的FAQ.md,启动端口可以根据需要在webui.py最末尾处修改。
4.1.1、访问系统
直接访问系统可以看到默认提供的一个demo体验界面,该界面主要实现了以下基本功能:
1)、运行前自动读取configs/model_config.py中LLM及Embedding模型枚举及默认模型设置运行模型,如需重新加载模型,可在 模型配置 Tab 重新选择后点击 重新加载模型 进行模型加载;
2)、可手动调节保留对话历史长度、匹配知识库文段数量,可根据显存大小自行调节;
3)、对话 Tab 具备模式选择功能,可选择 LLM对话 与 知识库问答 模式进行对话,支持流式对话;
4)、添加 配置知识库 功能,支持选择已有知识库或新建知识库,并可向知识库中新增上传文件/文件夹,使用文件上传组件选择好文件后点击 上传文件并加载知识库,会将所选上传文档数据加载至知识库中,并基于更新后知识库进行问答;
5)、新增 知识库测试 Beta Tab,可用于测试不同文本切分方法与检索相关度阈值设置,暂不支持将测试参数作为 对话 Tab 设置参数。
6)、后续版本中将会增加对知识库的修改或删除,及知识库中已导入文件的查看。
【说明】:如果采用默认配置启动未量化的ChatGLM-6B,初始状态需要消耗13G的显存,如果显存不够的建议选择量化INT4或者INT8来运行,需要修改configs/model_config.py,将LLM的值修改为chatglm-6b-int4或者chatglm-6b-int8.
以下是我基于chatglm-6b-int4运行,进行了几轮对话,基本上效果还可以,显存消耗7G左右。
4.1.2、模型配置
4.1.3、上传知识库
INFO 2023-05-30 19:22:44,945-1d: /root/HDD1/chatglm/langchain-ChatGLM/content/产品培训总结/product_train 已成功加载 INFO 2023-05-30 19:22:44,945-1d: 文件加载完毕,正在生成向量库 Batches: 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 5.90it/s] INFO 2023-05-30 19:22:45,826-1d: Loading faiss with AVX2 support. INFO 2023-05-30 19:22:45,852-1d: Successfully loaded faiss with AVX2 support. INFO 2023-05-30 19:22:45,895-1d: 已添加 product_train 内容至知识库,并已加载知识库,请开始提问回答情况基本上是根据我提供的素材进行的语言组织来回答的,如果提交的稳定质量比较高,再经过微调,实现智能客户类的应用基本上可以满足需求。
4.2、命令行启动
$ python cli_demo.py五、FAQ
问题1、torch.cuda.OutOfMemoryError: CUDA out of memory
很明显,显存不足,建议切换到chatglm-6b-int4或者chatglm-6b-int4
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 2.00 MiB (GPU 0; 7.80 GiB total capacity; 5.95 GiB already allocated; 2.56 MiB free; 6.91 GiB reserved in total by PyTorch) If reserved memory is >> allocated memory try setting max_split_size_mb to avoid fragmentation. See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF问题2、”RuntimeError: Library cudart is not initialized”
这个错误通常是由于缺少或损坏的 CUDA 库文件引起的。要解决这个问题,需要安装 CUDA Toolkit :
安装CUDA Toolkit
sudo yum-config-manager –add-repo https://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-rhel7.repo sudo yum clean all sudo yum -y install nvidia-driver-latest-dkms sudo yum -y install cuda在安装 CUDA Toolkit 后,您需要设置一些环境变量以确保 CUDA 应用程序能够正常工作。以下是一些常见的环境变量:
1)、PATH:将 CUDA 工具和库路径添加到 PATH 环境变量中,以便系统可以找到它们。
export PATH=/usr/local/cuda-12.1/bin:$PATH2)、LD_LIBRARY_PATH:将 CUDA 库路径添加到 LD_LIBRARY_PATH 环境变量中,以便系统可以加载它们。这通常包括 CUDA 运行时库、CUDA 驱动程序和 NVIDIA 图形驱动程序。
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH3)、CUDA_HOME:设置 CUDA_HOME 环境变量指向您的 CUDA 安装路径,以便其他程序可以使用它。
export CUDA_HOME=/usr/local/cuda-12.1为了使上述环境变量在每次登录时都可用,可以将它们添加到 ~/.bashrc 文件中,或者根据您所使用的 shell 添加到其他 shell 配置文件中。
4)、检查 CUDA 路径:首先,请确保您已经正确安装了 CUDA 并且设置了正确的环境变量。您可以检查 CUDA 的安装路径和环境变量是否正确设置。例如,在bash下,您可以通过运行以下命令来查看CUDA的版本和路径
nvcc –version echo $LD_LIBRARY_PATH问题3、ImportError: libGL.so.1: cannot open shared object file: No such file or directory
这个错误通常是由于缺少 OpenGL 库文件引起的。要解决这个问题,您需要安装缺失的 opengl 包。在 CentOS 系统中,您可以使用以下命令来安装 opengl 包:
sudo yum install mesa-libGL如果您已经安装了这个包但是还遇到了相同的问题,您可以尝试使用以下命令创建软链接:
sudo ln -sf /usr/lib64/libGL.so.1 /usr/lib/libGL.so.1这个命令会将 /usr/lib64/libGL.so.1 文件的软链接创建到 /usr/lib/libGL.so.1 文件上,这通常可以解决 libGL.so.1 无法打开的问题。
问题4、ModuleNotFoundError: No module named _sqlite3
重新编译Python支持sqlite3数据库
# 配置Python编译参数,增加sqlite3支持,–prefix指定编译安装路径 LDFLAGS=“${LDFLAGS} -Wl,-rpath=/usr/local/openssl/lib” ./configure –with-openssl=/usr/local/openssl –prefix=/root/HDD1/chatglm/langchain-ChatGLM/env38/bin/python3.8 —enable-loadable-sqlite-extensions # 编译并安装 make make install # 验证Python是否支持sqlite3,进入Python解释器环境 import sqlite3 print(sqlite3.version)如果您想要替换虚拟环境中的 Python,并且保留已安装的第三方库(即 site-packages 目录),可以按照以下步骤操作:
1)、备份当前虚拟环境的 site-packages 目录。在命令行中,进入虚拟环境所在的目录,然后使用以下命令将 site-packages 目录打包并备份到当前目录下(以 Linux 系统为例):
tar -czvf site-packages.tar.gz /path/to/virtualenv/lib/python3.x/site-packages这将在虚拟环境目录下创建一个名为 site-packages.tar.gz 的压缩文件,其中包含了所有已安装的第三方库。
2)、下载并安装新版本的 Python。您可以从 Python 官网下载适用于您的操作系统的安装程序,并按照提示进行安装。请确保选择与现有虚拟环境兼容的 Python 版本,并记下其安装路径。
3)、删除原始虚拟环境中的 Python 解释器。在命令行中,进入虚拟环境所在的目录,然后运行以下命令删除原始的 Python 解释器(以 Linux 系统为例):
rm -rf /path/to/virtualenv/bin/python4)、创建一个指向新 Python 解释器的符号链接。在虚拟环境所在的目录中,运行以下命令:
ln -s /path/to/new/python /path/to/virtualenv/bin/python这将创建一个名为 python 的符号链接,它将指向新 Python 解释器的路径。
5)、恢复 site-packages 目录。在虚拟环境所在的目录下,解压之前备份的 site-packages 目录的压缩文件,并恢复所有已安装的第三方库:
tar -xzvf site-packages.tar.gz -C /path/to/virtualenv/lib/python3.x/请注意修改上述命令中的 /path/to/virtualenv 和 /path/to/new/python 为实际的路径。如果您使用的是 Windows 系统,请相应地调整路径格式。
问题5、libstdc++.so.6: version `GLIBCXX_3.4.20 not found
原因:CentOS 7.6默认安装的gcc版本为4.6.8,不支持GLIBCXX_3.4.20,需要升级gcc版本.
1)配置阿里elrepo镜像源
首先按照官网的安装说明,配置 ELRepo:
> rpm —import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org接着,按照你的系统版本,如果是 RHEL-8 或者 CentOS-8 则运行:
> yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpmRHEL-7, SL-7 或者 CentOS-7:
> yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpmRHEL-6, SL-6 或者 CentOS-6:
> yum install https://www.elrepo.org/elrepo-release-6.el6.elrepo.noarch.rpm建议先备份
/etc/yum.repos.d/elrepo.repo : sudo cp /etc/yum.repos.d/elrepo.repo /etc/yum.repos.d/elrepo.repo.bak然后编辑
/etc/yum.repos.d/elrepo.repo 文件,在 mirrorlist= 开头的行前面加 # 注释掉;并将 elrepo.org/linux 替换为 mirrors.aliyun.com/elrepo。最后,更新软件包缓存
sudo yum makecache2)安装新版本gcc
CentOS 7.6 默认安装的 GCC 版本是 4.8.5,如果需要升级到较新的版本,您可以按照以下步骤进行:
添加 SCL 软件仓库
SCL(Software Collections)是一种在 CentOS 中使用较新软件包的方法。您首先需要安装 centos-release-scl 包来启用 SCL 软件仓库:
sudo yum install centos-release-scl安装所需的 GCC 版本
列出所有可用的 GCC 版本:
sudo yum list devtoolset*选择其中一个较新的版本,例如 GCC 8:
sudo yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++安装后,您需要激活 devtoolset-8 工具集以使用新的 GCC 编译器。
激活 devtoolset-8
运行以下命令激活 devtoolset-8 工具集:
scl enable devtoolset-8 bash您也可以将此命令添加到 .bashrc 文件中,以便每次登录时自动激活工具集。
检查 GCC 版本
运行以下命令检查 GCC 版本:
[root@localhost lib64]# gcc –version gcc (GCC) 8.3.1 20190311 (Red Hat 8.3.1-3) Copyright (C) 2018 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.如果输出显示使用的是新版 GCC,则表明已经成功升级了。
3)创建软链指向新的gcc
在安装完新版本的编译器之后,按照以下步骤执行,即可解决/lib64/libstdc++.so.6:找不到版本“GLIBCXX_3.4.20”的问题。
# 查看新版本gcc的安装路径which gcc # /opt/rh/devtoolset-8/root/usr/bin/gcc # /opt/gcc-10.2.1/usr/lib64/libstdc++.so.6.0.28 # 进入gcc安装目录 cd /opt/gcc-10.2.1/usr/lib64 cp libstdc++.so.6.0.28 /usr/lib64/ cd /usr/lib64/ mv libstdc++.so.6 libstdc++.so.6.OLD ln -sf libstdc++.so.6.0.28 libstdc++.so.6strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!