前言
Quivr 基于Supabase構建本地知識庫
如何快速部署PrivateGPT?打造企業(yè)私有化GPT
前面我們介紹過幾款構建本地知識庫的開源項目,其原理還是基于本地文件構建向量數據庫的方式,通過調用現有GPT語言模型的能力做向量相似計算,對于希望基于GPT語言模型的能力構建自己的APP應用或者集成到現有產品中去實際上會非常方便,具有一定的市場空間。
然后,對于一些涉密或者Security等級比較高的單位或者企業(yè),希望在保證數據安全性的前提下,也能享受大語言模型帶來的紅利,構建企業(yè)級本地私有化模型,基于此構建自己的GPT產品或者聊天機器人、智能客戶等等
在經過了一系列的選型,嘗試,對比之后,像LLaMa和GPT4ALL之類的開源模型目前對中文的支持不不夠友好,另外參數量也比較小,最終發(fā)現清華大學開源的一款ChatGPT-6B模型,最關鍵的問題,對中文支持比較友好,也可以上傳數據集自己進行模型微調,最重要的是可以支持在消費級的顯卡上運行,當然了,要是實際使用還是建議選擇一臺具備AI算力的服務器來部署,顯存至少25G以上,在沒有服務器的條件下,建議使用Colab,并啟用GPU A100。
一、產品介紹
1.1、GLM:預訓練模型
GLM的出發(fā)點是將3種主流的預訓練模型進行統(tǒng)一:
GPT的訓練目標是從左到右的文本生成
BERT的訓練目標是對文本進行隨機掩碼,然后預測被掩碼的詞
T5則是接受一段文本,從左到右的生成另一段文本
1.2、開源GLM系列
GLM Github Paper(https://github.com/THUDM/GLM)
GLM-130B Github Paper(https://arxiv.org/abs/2210.02414)
ChatGLM-6B 博客(https://chatglm.cn/blog)
可以在消費級的GPU上進行微調
1.3、功能演示
1.4、ChatGLM-6B
由清華大學知識工程 (KEG) 實驗室和智譜AI公司與于2023年共同訓練的語言模型
ChatGLM-6B 參考了 ChatGPT 的設計思路,在千 億基座模型 GLM-130B 中注入了代碼預訓練,通 過有監(jiān)督微調等技術實現與人類意圖對齊(即讓機 器的回答符合人類的期望和價值觀)
ChatGLM-6B 是一個具有62億參數的中英雙語語言模型。通過使用與 ChatGLM(chatglm.cn)相同的技術,ChatGLM-6B 初具中文問答和對話功能,并支持在單張 2080Ti 上進行推理使用。
不同于訓練ChatGPT需要1萬+ A100顯卡, ChatGLM-6B可以單機運行在消費級顯卡上(13G 可運行,建議16-24G顯卡),未來使用空間大
具體來說,ChatGLM-6B 有如下特點:
充分的中英雙語預訓練: ChatGLM-6B 在 1:1 比例的中英語料上訓練了 1T 的 token 量,兼具雙語能力。
優(yōu)化的模型架構和大?。?吸取 GLM-130B 訓練經驗,修正了二維 RoPE 位置編碼實現,使用傳統(tǒng)FFN結構。6B(62億)的參數大小,也使得研究者和個人開發(fā)者自己微調和部署 ChatGLM-6B 成為可能。
較低的部署門檻: FP16 半精度下,ChatGLM-6B 需要至少 13GB 的顯存進行推理,結合模型量化技術,這一需求可以進一步降低到 10GB(INT8) 和 6GB(INT4), 使得 ChatGLM-6B 可以部署在消費級顯卡上。
更長的序列長度: 相比 GLM-10B(序列長度1024),ChatGLM-6B 序列長度達 2048,支持更長對話和應用。
人類意圖對齊訓練: 使用了監(jiān)督微調(Supervised Fine-Tuning)、反饋自助(Feedback Bootstrap)、人類反饋強化學習(Reinforcement Learning from Human Feedback) 等方式,使模型初具理解人類指令意圖的能力。輸出格式為 markdown,方便展示。
因此,ChatGLM-6B 具備了一定條件下較好的對話與問答能力。當然,ChatGLM-6B 也有相當多已知的局限和不足:
模型容量較?。?6B 的小容量,決定了其相對較弱的模型記憶和語言能力。在面對許多事實性知識任務時,ChatGLM-6B 可能會生成不正確的信息;她也不擅長邏輯類問題(如數學、編程)的解答。
可能會產生有害說明或有偏見的內容:ChatGLM-6B 只是一個初步與人類意圖對齊的語言模型,可能會生成有害、有偏見的內容。
較弱的多輪對話能力:ChatGLM-6B 的上下文理解能力還不夠充分,在面對長答案生成,以及多輪對話的場景時,可能會出現上下文丟失和理解錯誤的情況。
英文能力不足:訓練時使用的指示大部分都是中文的,只有一小部分指示是英文的。因此在使用英文指示時,回復的質量可能不如中文指示的回復,甚至與中文指示下的回復矛盾。
易被誤導:ChatGLM-6B 的“自我認知”可能存在問題,很容易被誤導并產生錯誤的言論。例如當前版本模型在被誤導的情況下,會在自我認知上發(fā)生偏差。即使該模型經過了1萬億標識符(token)左右的雙語預訓練,并且進行了指令微調和人類反饋強化學習(RLHF),但是因為模型容量較小,所以在某些指示下可能會產生有誤導性的內容。
1.5、ChatGLM-130B
2022年8月,智譜AI基于GLM框架,推出1300億參數的中英雙語稠密模型GLM-130B,綜合能力與GPT3相當 內存節(jié)省75%,可在單臺3090 (4)或單臺2080(8)進行無損推理 高速推理,比Pytorch提升7-8倍速度
跨平臺,支持不同計算平臺的適配和應用
ChatGLM 參考了 ChatGPT 的設計思路,在千億基座模型 GLM-130B1 中注入了代碼預訓練,通過有監(jiān)督微調(Supervised Fine-Tuning)等技術實現人類意圖對齊。ChatGLM 當前版本模型的能力提升主要來源于獨特的千億基座模型 GLM-130B。它是不同于 BERT、GPT-3 以及 T5 的架構,是一個包含多目標函數的自回歸預訓練模型。2022年8月,我們向研究界和工業(yè)界開放了擁有1300億參數的中英雙語稠密模型 GLM-130B1,該模型有一些獨特的優(yōu)勢:
雙語: 同時支持中文和英文。
高精度(英文): 在公開的英文自然語言榜單 LAMBADA、MMLU 和 Big-bench-lite 上優(yōu)于 GPT-3 175B(API: davinci,基座模型)、OPT-175B 和 BLOOM-176B。
高精度(中文): 在7個零樣本 CLUE 數據集和5個零樣本 FewCLUE 數據集上明顯優(yōu)于 ERNIE TITAN 3.0 260B 和 YUAN 1.0-245B。
快速推理: 首個實現 INT4 量化的千億模型,支持用一臺 4 卡 3090 或 8 卡 2080Ti 服務器進行快速且基本無損推理。
可復現性: 所有結果(超過 30 個任務)均可通過我們的開源代碼和模型參數復現。
跨平臺: 支持在國產的海光 DCU、華為昇騰 910 和申威處理器及美國的英偉達芯片上進行訓練與推理。
三、系統(tǒng)部署
3.1、硬件要求
在無量化的情況下,顯存初始化基本上都需要13G內存,16G的顯存可能對話兩輪就內存爆滿了,個人部署建議還是使用量化模型。
3.2、系統(tǒng)環(huán)境
操作系統(tǒng):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 install
3.3、部署ChatGLM 6B
3.3.1、下載源碼git clone https://github.com/imClumsyPanda/langchain-ChatGLM.gitcd langchain-ChatGLM
3.3.2、配置Python虛擬環(huán)境
確認您已經安裝了 Python 3.8.13,可以在終端或命令行中輸入 python3 -V 來檢查。
python3.8 -m venv env38
其中 env38 是您為該虛擬環(huán)境取的名字,可以根據需要自行更改。
激活虛擬環(huán)境。在終端或命令行中輸入 source env38/bin/activate(Mac/Linux) 或 env38\Scripts\activate.bat(Windows)激活虛擬環(huán)境。# 激活虛擬環(huán)境source env38/bin/activate# 升級pip到最新版本pip install --upgrade pip
在虛擬環(huán)境中安裝所需的 Python 包和依賴項??梢允褂?pip 命令來安裝,例如 pip install numpy。
當您完成所有操作后,可以使用 deactivate 命令退出虛擬環(huán)境。
注意:為了不影響全局的Python環(huán)境,建議后續(xù)所有的操作都在Python的虛擬環(huán)境中執(zhí)行,終端中顯示(myenv)你的虛擬環(huán)境名稱就代表你當前切入的虛擬環(huán)境。
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 需要先完成卸載避免引發(fā) tools 沖突$ pip uninstall detectron2# 檢查paddleocr依賴,linux環(huán)境下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
因為模型文件較大,如果你的網絡環(huán)境較差,下載模型參數可能會花費較長時間甚至失敗。此時可以先將模型下載到本地,然后從本地加載。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# 設置文件執(zhí)行權限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網絡不穩(wěn)定,倉庫文件過大會出現抖動,下載失敗的情況)
# 下載 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' }}
四、系統(tǒng)啟動
4.1、Web 模式啟動
pip install gradiopython webui.py
啟動完成后如下圖所示,如在啟動過程中遇到問題可以查閱官方倉庫中的FAQ.md,啟動端口可以根據需要在webui.py最末尾處修改。
4.1.1、訪問系統(tǒng)
直接訪問系統(tǒng)可以看到默認提供的一個demo體驗界面,該界面主要實現了以下基本功能:
運行前自動讀取configs/model_config.py中LLM及Embedding模型枚舉及默認模型設置運行模型,如需重新加載模型,可在 模型配置 Tab 重新選擇后點擊 重新加載模型 進行模型加載;
可手動調節(jié)保留對話歷史長度、匹配知識庫文段數量,可根據顯存大小自行調節(jié);
對話 Tab 具備模式選擇功能,可選擇 LLM對話 與 知識庫問答 模式進行對話,支持流式對話;
添加 配置知識庫 功能,支持選擇已有知識庫或新建知識庫,并可向知識庫中新增上傳文件/文件夾,使用文件上傳組件選擇好文件后點擊 上傳文件并加載知識庫,會將所選上傳文檔數據加載至知識庫中,并基于更新后知識庫進行問答;
新增 知識庫測試 Beta Tab,可用于測試不同文本切分方法與檢索相關度閾值設置,暫不支持將測試參數作為 對話 Tab 設置參數。
后續(xù)版本中將會增加對知識庫的修改或刪除,及知識庫中已導入文件的查看。
【說明】:如果采用默認配置啟動未量化的ChatGLM-6B,初始狀態(tài)需要消耗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 內容至知識庫,并已加載知識庫,請開始提問
回答情況基本上是根據我提供的素材進行的語言組織來回答的,如果提交的穩(wěn)定質量比較高,再經過微調,實現智能客戶類的應用基本上可以滿足需求。
4.2、命令行啟動
$ python cli_demo.py
五、FAQ
問題1、torch.cuda.OutOfMemoryError: CUDA out of memory
很明顯,顯存不足,建議切換到chatglm-6b-int4或者chatglm-6b-int4torch.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.reposudo yum clean allsudo yum -y install nvidia-driver-latest-dkmssudo yum -y install cuda
在安裝 CUDA Toolkit 后,您需要設置一些環(huán)境變量以確保 CUDA 應用程序能夠正常工作。以下是一些常見的環(huán)境變量:
1)、PATH:將 CUDA 工具和庫路徑添加到 PATH 環(huán)境變量中,以便系統(tǒng)可以找到它們。export PATH=/usr/local/cuda-12.1/bin:$PATH
2)、LD_LIBRARY_PATH:將 CUDA 庫路徑添加到 LD_LIBRARY_PATH 環(huán)境變量中,以便系統(tǒng)可以加載它們。這通常包括 CUDA 運行時庫、CUDA 驅動程序和 NVIDIA 圖形驅動程序。
export LD_LIBRARY_PATH=/usr/local/cuda-12.1/lib64:$LD_LIBRARY_PATH
3)、CUDA_HOME:設置 CUDA_HOME 環(huán)境變量指向您的 CUDA 安裝路徑,以便其他程序可以使用它。export CUDA_HOME=/usr/local/cuda-12.1
為了使上述環(huán)境變量在每次登錄時都可用,可以將它們添加到 ~/.bashrc 文件中,或者根據您所使用的 shell 添加到其他 shell 配置文件中。
4)、檢查 CUDA 路徑:首先,請確保您已經正確安裝了 CUDA 并且設置了正確的環(huán)境變量。您可以檢查 CUDA 的安裝路徑和環(huán)境變量是否正確設置。例如,在bash下,您可以通過運行以下命令來查看CUDA的版本和路徑
nvcc --versionecho $LD_LIBRARY_PATH
問題3、ImportError: libGL.so.1: cannot open shared object file: No such file or directory
這個錯誤通常是由于缺少 OpenGL 庫文件引起的。要解決這個問題,您需要安裝缺失的 opengl 包。在 CentOS 系統(tǒng)中,您可以使用以下命令來安裝 opengl 包:sudo yum install mesa-libGL
如果您已經安裝了這個包但是還遇到了相同的問題,您可以嘗試使用以下命令創(chuàng)建軟鏈接:
sudo ln -sf /usr/lib64/libGL.so.1 /usr/lib/libGL.so.1
這個命令會將 /usr/lib64/libGL.so.1 文件的軟鏈接創(chuàng)建到 /usr/lib/libGL.so.1 文件上,這通??梢越鉀Q 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# 編譯并安裝makemake install# 驗證Python是否支持sqlite3,進入Python解釋器環(huán)境import sqlite3print(sqlite3.version)
如果您想要替換虛擬環(huán)境中的 Python,并且保留已安裝的第三方庫(即 site-packages 目錄),可以按照以下步驟操作:
備份當前虛擬環(huán)境的 site-packages 目錄。在命令行中,進入虛擬環(huán)境所在的目錄,然后使用以下命令將 site-packages 目錄打包并備份到當前目錄下(以 Linux 系統(tǒng)為例):
tar -czvf site-packages.tar.gz /path/to/virtualenv/lib/python3.x/site-packages
這將在虛擬環(huán)境目錄下創(chuàng)建一個名為 site-packages.tar.gz 的壓縮文件,其中包含了所有已安裝的第三方庫。
下載并安裝新版本的 Python。您可以從 Python 官網下載適用于您的操作系統(tǒng)的安裝程序,并按照提示進行安裝。請確保選擇與現有虛擬環(huán)境兼容的 Python 版本,并記下其安裝路徑。
刪除原始虛擬環(huán)境中的 Python 解釋器。在命令行中,進入虛擬環(huán)境所在的目錄,然后運行以下命令刪除原始的 Python 解釋器(以 Linux 系統(tǒng)為例):rm -rf /path/to/virtualenv/bin/python
創(chuàng)建一個指向新 Python 解釋器的符號鏈接。在虛擬環(huán)境所在的目錄中,運行以下命令:
ln -s /path/to/new/python /path/to/virtualenv/bin/python
這將創(chuàng)建一個名為 python 的符號鏈接,它將指向新 Python 解釋器的路徑。
恢復 site-packages 目錄。在虛擬環(huán)境所在的目錄下,解壓之前備份的 site-packages 目錄的壓縮文件,并恢復所有已安裝的第三方庫:tar -xzvf site-packages.tar.gz -C /path/to/virtualenv/lib/python3.x/
請注意修改上述命令中的 /path/to/virtualenv 和 /path/to/new/python 為實際的路徑。如果您使用的是 Windows 系統(tǒng),請相應地調整路徑格式。
問題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
接著,按照你的系統(tǒng)版本,如果是 RHEL-8 或者 CentOS-8 則運行:> yum install https://www.elrepo.org/elrepo-release-8.el8.elrepo.noarch.rpm
RHEL-7, SL-7 或者 CentOS-7:
> yum install https://www.elrepo.org/elrepo-release-7.el7.elrepo.noarch.rpm
RHEL-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 makecache
2)安裝新版本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 --versiongcc (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 NOwarranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
如果輸出顯示使用的是新版 GCC,則表明已經成功升級了。
3)創(chuàng)建軟鏈指向新的gcc
在安裝完新版本的編譯器之后,按照以下步驟執(zhí)行,即可解決/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/lib64cp libstdc++.so.6.0.28 /usr/lib64/cd /usr/lib64/mv libstdc++.so.6 libstdc++.so.6.OLDln -sf libstdc++.so.6.0.28 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX