🚀 AnyGPT:統一多模態大語言模型基礎模型
AnyGPT是一個支持任意模態轉換的多模態語言模型,它利用離散表示統一處理語音、文本、圖像和音樂等多種模態數據。其基礎模型實現了四種模態的對齊,支持不同模態與文本之間的相互轉換。此外,基於多種生成模型構建的AnyInstruct數據集,包含了任意模態轉換的指令。在該數據集上訓練的聊天模型能夠進行自由的多模態對話,用戶可以隨意插入多模態數據。
🚀 快速開始
AnyGPT提出了一種生成式訓練方案,將所有模態的數據轉換為統一的離散表示,並使用Next Token Prediction任務在大語言模型(LLM)上進行統一訓練。從“壓縮即智能”的角度來看:當分詞器(Tokenizer)的質量足夠高,且大語言模型的困惑度(PPL)足夠低時,就有可能將互聯網上大量的多模態數據壓縮到同一個模型中,從而湧現出純文本大語言模型所不具備的能力。
項目演示請見項目頁面。
✨ 主要特性
- 多模態統一處理:支持語音、文本、圖像和音樂等多種模態的統一處理和相互轉換。
- 自由對話:聊天模型可進行自由的多模態對話,允許隨意插入多模態數據。
- 生成式訓練:採用生成式訓練方案,將多模態數據轉換為統一離散表示進行訓練。
📦 安裝指南
git clone https://github.com/OpenMOSS/AnyGPT.git
cd AnyGPT
conda create --name AnyGPT python=3.9
conda activate AnyGPT
pip install -r requirements.txt
💻 使用示例
基礎用法
python anygpt/src/infer/cli_infer_base_model.py \
--model-name-or-path "path/to/AnyGPT-7B-base" \
--image-tokenizer-path models/seed-tokenizer-2/seed_quantizer.pt \
--speech-tokenizer-path "path/to/model" \
--speech-tokenizer-config "path/to/config" \
--soundstorm-path "path/to/model" \
--output-dir "infer_output/base"
例如:
python anygpt/src/infer/cli_infer_base_model.py \
--model-name-or-path models/anygpt/base \
--image-tokenizer-path models/seed-tokenizer-2/seed_quantizer.pt \
--speech-tokenizer-path models/speechtokenizer/ckpt.dev \
--speech-tokenizer-config models/speechtokenizer/config.json \
--soundstorm-path models/soundstorm/speechtokenizer_soundstorm_mls.pt \
--output-dir "infer_output/base"
高級用法
基礎模型可以執行多種任務,包括文本到圖像、圖像描述、自動語音識別(ASR)、零樣本文本到語音(TTS)、文本到音樂以及音樂描述等。
我們可以按照特定的指令格式進行推理:
- 文本到圖像
text|image|{caption}
- 示例:
text|image|A bustling medieval market scene with vendors selling exotic goods under colorful tents
- 圖像描述
image|text|{caption}
- 示例:
image|text|static/infer/image/cat.jpg
- TTS(隨機語音)
text|speech|{speech content}
- 示例:
text|speech|I could be bounded in a nutshell and count myself a king of infinite space.
- 零樣本TTS
text|speech|{speech content}|{voice prompt}
- 示例:
text|speech|I could be bounded in a nutshell and count myself a king of infinite space.|static/infer/speech/voice_prompt1.wav/voice_prompt3.wav
- ASR
speech|text|{speech file path}
- 示例:
speech|text|AnyGPT/static/infer/speech/voice_prompt2.wav
- 文本到音樂
text|music|{caption}
- 示例:
text|music|features an indie rock sound with distinct elements that evoke a dreamy, soothing atmosphere
- 音樂描述
music|text|{music file path}
- 示例:
music|text|static/infer/music/features an indie rock sound with distinct element.wav
📚 詳細文檔
模型權重
SpeechTokenizer用於語音的分詞和重建,Soundstorm負責完成副語言信息,SEED-tokenizer用於圖像的分詞。
用於重建圖像的unCLIP SD-UNet模型權重和用於音樂分詞和重建的Encodec-32k模型權重將自動下載。
注意事項
對於不同的任務,我們使用了不同的語言模型解碼策略。圖像、語音和音樂生成的解碼配置文件分別位於config/image_generate_config.json
、config/speech_generate_config.json
和config/music_generate_config.json
中。其他模態到文本的解碼配置文件位於config/text_generate_config.json
中。您可以直接修改或添加參數來更改解碼策略。
由於數據和訓練資源的限制,模型的生成可能仍然不穩定。您可以多次生成或嘗試不同的解碼策略。
語音和音樂響應將保存為.wav
文件,圖像響應將保存為jpg
文件。文件名將是提示詞和時間的組合。這些文件的路徑將在響應中顯示。
訓練
預訓練
- 安裝依賴
cd FastChat
pip3 install -e ".[train]"
- 運行
srun --partition=llm_h --job-name=pretrain --gres=gpu:8 --quotatype=spot --ntasks=1 --ntasks-per-node=1 --cpus-per-task 100 --kill-on-bad-exit=1 bash scripts/stage1_pretrain.sh
我們在"data"文件夾中提供了一些示例數據。要下載完整的數據集,請參考以下內容:
- 圖像數據:https://huggingface.co/datasets/zhanjun/AnyGPT-data-image
- t2i文件夾中的兩個數據集是高質量圖像數據集,用於微調文本到圖像的生成。
- 語音數據:https://huggingface.co/datasets/zhanjun/AnyGPT-data-speech
- 音樂數據:無
- 指令數據:https://huggingface.co/datasets/zhanjun/Anygpt_data_instruction
這些數據已通過多模態分詞器進行了預處理。
🔧 技術細節
AnyGPT提出的生成式訓練方案,核心在於將所有模態的數據轉換為統一的離散表示,然後使用Next Token Prediction任務在大語言模型上進行統一訓練。從“壓縮即智能”的理論出發,當分詞器能夠高效地將多模態數據進行離散化,且大語言模型能夠以低困惑度處理這些離散表示時,就有可能將海量的多模態數據壓縮到同一個模型中,從而使模型具備處理多種模態數據和進行模態轉換的能力。
📄 許可證
AnyGPT
遵循LLaMA2的原始許可證發佈。
引用
如果您在研究或應用中發現AnyGPT和AnyInstruct很有用,請引用以下文獻:
@article{zhan2024anygpt,
title={AnyGPT: Unified Multimodal LLM with Discrete Sequence Modeling},
author={Zhan, Jun and Dai, Junqi and Ye, Jiasheng and Zhou, Yunhua and Zhang, Dong and Liu, Zhigeng and Zhang, Xin and Yuan, Ruibin and Zhang, Ge and Li, Linyang and others},
journal={arXiv preprint arXiv:2402.12226},
year={2024}
}
致謝