基于書生系列大模型,社區用戶不斷創造出令人耳目一新的項目,從靈感萌發到落地實踐,每一個都充滿智慧與價值。“與書生共創”將陸續推出一系列文章,分享這些項目背后的故事與經驗。歡迎訂閱并積極投稿,一起分享經驗與成果,推動大模型技術的普及與進步。
本文來自社區投稿,作者Alannikos,書生大模型實戰營學員。本文將向大家介紹孵化于書生大模型實戰營的項目 ,基于 InternLM 的情感調節大師 FunGPT。
1.項目介紹
在這個快節奏的世界里,我們需要一點調味劑來調和生活。無論是需要一點甜言蜜語來提振精神,還是需要一劑犀利懟語來釋放壓力,FunGPT 都能滿足您的需求。FunGPT 基于 InternLM2.5 系列大模型,利用 XTuner 進行QLoRA指令微調,使模型能夠滿足用戶的個性化要求。同時為了方便用戶,我們還發布了 1.8B 系列小模型,減量不減效果;此外,我們還利用 LMDeploy 對多個模型使用感知權重量化(AWQ)算法進行W4A16量化,既節省顯存又提升推理速度!
🍬 甜言蜜語模式:
- 心情提升器🌟?:當您感到低落,我們的甜言蜜語模式能讓您的心情瞬間飆升,就像嘗了一顆超級甜的蜜糖。
- 自信加油站💪🌈:同時我們的贊師傅會用合適且獨特的方式夸獎您,讓您的自信心爆棚。
🔪 犀利懟語模式:
- 壓力釋放閥:當您感到壓力山大,我們的懟人模式能讓您在懟人的同時,找到釋放的出口。
- 幽默吐槽機😂👅:懟師傅的言語不僅犀利,而且幽默風趣,在懟人的過程中,您還能體會到腦洞大開的懟人方式。
項目地址:
https://github.com/Alannikos/FunGPT
視頻地址:
https://www.bilibili.com/video/BV1EGBYYtEMA/
InternLM GitHub:
https://github.com/InternLM/InternLM
LMDeploy GitHub
https://github.com/InternLM/lmdeploy
XTuner GitHub:
https://github.com/InternLM/xtuner
項目架構圖
2.技術方法
數據生成
在大模型微調過程中,我們可以借助許多方法進行有監督微調(SFT),不論是通過原生的 LoRA 微調等技術,還是通過封裝好的工具,比如 XTuner,我們都需要準備高質量的微調數據。但是通過人工手動標注數據的成本較高,對于大部分個人開發者來說,效率比較低下,本項目的方案就是采用大模型 API 來生成我們所需要的多輪對話數據集,例如使用 InternLM 等(現階段可直接使用 EDG4LLM 工具,該工具內置 InternLM 等主流模型API),這樣的方式簡單且易于控制。通常來說,生成的數據集還是能夠達到較好的微調效果。
LLM 使用
大語言模型是本項目的核心組件,我們選用了開源的 InternLM2.5 系列作為基礎模型。InternLM2.5 具有強大的理解和生成能力,支持長上下文窗口,并且具有較好的中文理解能力。詳細的使用方法請參考 https://github.com/Alannikos/FunGPT/blob/main/LLM/models/internlm2_5_7b_chat.py
在本項目中,LLM主要負責對用戶輸入進行理解和回復生成,同時還需要處理多模態輸入,并與ASR和TTS模塊進行協同工作。
ASR 使用
語音識別模塊采用了開源的 SenseVoice 模型,該模型具有優秀的多語言語音識別能力,支持中英文等多語言識別,準確率較高,且能夠較好地處理背景噪聲。具體的部署和使用說明請查看https://github.com/Alannikos/FunGPT/blob/main/ASR/models/sensevoice.py
在實際應用中,ASR 模塊負責將用戶的語音輸入轉換為文本,并傳遞給 LLM 進行處理。我們提供了流式識別接口,也支持實時語音轉寫。
TTS 使用
語音合成模塊使用了開源的 ChatTTS 模型,該模型能夠生成自然流暢的語音。支持多說話人合成,并且可以調節語速和音色等參數。詳細的配置和使用方法請參考https://github.com/Alannikos/FunGPT/blob/main/TTS/models/chattts.py
TTS 模塊主要負責將 LLM 生成的文本轉換為語音輸出,支持批量合成模式。我們還提供了情感控制接口,可以根據文本內容自動調整語氣和語調,使輸出更加自然。
模型微調
為了適應特定場景的需求,我們提供了完整的模型微調流程。本項目主要采用了XTuner提供的QLoRA參數微調方法,該工具提供了友好的配置模板和完善的訓練監控。具體的微調流程和參數設置請參考https://github.com/Alannikos/FunGPT/blob/main/Finetune/BoostBot/scripts/internlm2_5_chat_7b_qlora_alpaca_e3_copy.py
微調支持指令對齊、多輪對話等多種任務類型。我們提供了預處理腳本來轉換數據格式,同時XTuner也支持增量訓練,可以在已有模型基礎上繼續優化。
模型量化
為了在有限的計算資源下部署大模型,量化是一個重要的優化手段。我們使用 LMDeploy 進行模型量化,在保持模型性能的同時減少顯存占用,詳細的量化流程請參考 https://github.com/InternLM/lmdeploy
量化完成后,可以通過 LMDeploy 的 Benchmark 進行效果對比,同時 LMDeploy 還提供了不同量化策略的性能對比數據,幫助用戶選擇最適合的量化方案。
3.快速使用
3.1 部署環境
- 操作系統:Ubuntu 20.04.6 LTS
- CPU:Intel? Xeon? Platinum 8369B CPU @ 2.90GHz(在線 GPU 服務器)
- 顯卡:NVIDIA A100-SXM4-80GB, NVIDIA-SMI 535.54.03,Driver Version: 535.54.03,CUDA Version: 12.2
- Python: 3.10.0
3.2 關鍵依賴信息
Python==3.10.0
torch==2.4.1
torch-complex==0.4.4
torchaudio==2.4.1
torchvision==0.16.2
chattts==0.1.1
streamlit==1.38.0
audio-recorder-streamlit==0.0.10
3.3 部署步驟
Clone 代碼或者手動下載代碼放置服務器:
git clone https://github.com/Alannikos/FunGPT
配置 Python 環境(推薦使用 conda)
- 進入項目的根目錄
cd FunGPT
- 創建conda環境
conda create -n FunGPT python==3.10.0
- 安裝第三方庫
pip install -r requirements.txt# 大概需要1h左右
下載模型
TTS 模型(若使用則必選)
- git-lfs 安裝 由于涉及到模型文件的下載,首先需要保證
git-lfs
已經成功安裝。對于Linux
用戶來說,可按照下面的命令安裝:
apt install git-lfs
- 啟動
LFS
git lfs install
- 下載 TTS 模型到指定路徑
# 1. 進入指定目錄
cd /FunGPT/TTS/weights# 2. 從huggingface下載模型
git clone https://huggingface.co/2Noise/ChatTTS
- 無法訪問 HuggingFace 用戶,可從鏡像源下載
# 2. 從鏡像源下載模型
git clone https://hf-mirror.com/2Noise/ChatTTS
ASR 模型(若使用則必選)
由于涉及到模型文件的下載,首先需要保證 git-lfs
已經成功安裝。對于 Linux
用戶來說,可按照下面的命令安裝:
# 已下載用戶可忽略此條命令
apt install git-lfs
- 啟動
LFS
git lfs install
- 下載 TTS 模型到指定路徑
# 1. 進入指定目錄
cd /FunGPT/ASR/weights# 2. 從huggingface下載模型
git clone https://huggingface.co/FunAudioLLM/SenseVoiceSmall
- 無法訪問 HuggingFace 用戶,可從鏡像源下載
# 2. 從鏡像源下載模型
git clone https://hf-mirror.com/FunAudioLLM/SenseVoiceSmall
LLM 模型(必選)
對于 LLM 模型的選擇,我們提供了多個選擇,效果最佳的模型為 BanterBot-7b-chat 和 BoostBot-7b-chat,其次量化的模型效果也非常不錯;此處為了節約下載時間,我們選擇了這兩個 1_8B 模型: BanterBot-1_8b-chat 和 BoostBot-1_8b-chat 來作為示例,大家可以按照需求自由進行替換即可。
- 啟動
LFS
git lfs install
- 下載 LLM 模型到指定路徑
# 1. 進入指定目錄
cd /FunGPT/LLM/weights# 2. 從huggingface下載BanterBot-1_8b-chat模型
https://huggingface.co/Alannikos768/BanterBot_1_8b-chat# 3. 從huggingface下載BoostBot-1_8b-chat模型
https://huggingface.co/Alannikos768/BoostBot_1_8b-chat
- 無法訪問 HuggingFace用戶,可從 OpenXLab 下載
# 2. 從OpenXLab下載BanterBot-1_8b-chat模型(國內用戶)
git clone https://code.openxlab.org.cn/Alannikos/BanterBot-1_8b-chat.git# 3. 從OpenXLab下載BoostBot-1_8b-chat模型(國內用戶)
git clone https://code.openxlab.org.cn/Alannikos/BoostBot-1_8b-chat.git
運行網頁腳本
conda activate FunGPTstreamlit run app.py --server.address=127.0.0.1 --server.port=7860
3.4 模型體驗
- 如果是在遠程服務器上運行的,需要進行端口映射
ssh -p port user@ip -CNg -L 7860:127.0.0.1:7860 -o StrictHostKeyChecking=no
- 然后在體驗應用 打開瀏覽器,輸入
http://127.0.0.1:7860
,然后點擊對應界面即可體驗FunGPT