? HF レポ • ⚒️ SwissArmyTransformer (土) ? Twitter
• ? [CogView@NeurIPS 21] [GitHub] ? [GLM@ACL 22] [GitHub]
Slack と WeChat で参加しましょう
[2023.10] Zhipu AI の新世代マルチモーダル対話モデルである CogVLM (https://github.com/THUDM/CogVLM) に注目してください。ビジュアル エキスパートの新しいアーキテクチャを採用し、10 年間で 1 位を獲得しました。権威のある古典的なマルチモーダルタスク。現在のオープンソース CogVLM-17B 英語モデルは、GLM オープンソース中国語モデルに基づいています。
VisualGLM-6B は、画像、中国語、英語をサポートするオープンソースのマルチモーダル ダイアログ言語モデルです。この言語モデルは、62 億のパラメーターを備えた ChatGLM-6B に基づいており、画像部分はビジュアル モデルと言語間のブリッジを構築します。 BLIP2-Qformer のトレーニングによる言語モデル。合計 78 億のパラメータで構成されます。英語版についてはここをクリックしてください。
VisualGLM-6B は、画像、中国語、英語をサポートするオープンソースのマルチモーダル対話言語モデルです。言語モデルは ChatGLM-6B に基づいており、画像部分はビジュアル モデルと言語モデルの間のブリッジを構築します。 BLIP2-Qformer をトレーニングすることにより、モデル全体には合計 78 億のパラメーターが含まれます。
VisualGLM-6B は、CogView データセットからの 3,000 万の高品質の中国語の画像とテキストのペアと、事前トレーニング用の 3 億のスクリーニングされた英語の画像とテキストのペアに依存しています。このトレーニング方法は、その後の微調整段階で視覚情報を ChatGLM の意味空間に適切に調整し、モデルは長い視覚的な質問と回答データでトレーニングされ、人間の好みに適合する回答を生成します。
VisualGLM-6B は、Transformer の柔軟な変更とトレーニングをサポートし、Lora や P チューニングなどのパラメーターの効率的な微調整方法をサポートするツール ライブラリである SwissArmyTransformer (略してsat
) ライブラリによってトレーニングされます。このプロジェクトは、ユーザーの習慣に準拠したハグフェイス インターフェイスを提供するとともに、sat に基づくインターフェイスも提供します。
モデル量子化テクノロジーと組み合わせることで、ユーザーはそれを民生グレードのグラフィックス カードにローカルに展開できます (最小必要量は INT4 量子化レベルで 6.3G のビデオ メモリです)。
VisualGLM-6B オープン ソース モデルは、オープン ソース コミュニティと協力して大規模なモデル テクノロジの開発を促進することを目的としています。開発者およびすべての皆様は、オープン ソース契約を遵守し、このオープン ソース モデルおよびそれに基づくコードや派生物を使用しないでください。このオープンソース プロジェクトは、国や社会に害を及ぼす可能性のあるあらゆる目的で使用され、安全性が評価および文書化されていないサービスに使用されません。現在、このプロジェクトは、Web サイト、Android アプリ、Apple iOS アプリケーション、Windows アプリなどを含む、VisualGLM-6B に基づくアプリケーションを正式に開発していません。
VisualGLM-6B はまだ v1 バージョンであるため、画像記述の事実性/モデルの幻覚の問題、画像の詳細情報の取得が不十分であること、言語モデルによるいくつかの制限など、かなりの数の制限があることが現在知られています。モデルはトレーニングの各段階でデータのコンプライアンスと正確性を確保するために最善を尽くしますが、VisualGLM-6B モデルの規模が小さいことと、モデルが確率的要因やランダムな要因の影響を受けるという事実により、出力内容は保証できず、モデルは誤解を招きやすいです (詳細については「制限事項」セクションを参照してください)。 VisualGLM の以降のバージョンでは、このような問題を最適化するための取り組みが行われる予定です。このプロジェクトは、オープンソースのモデルとコードによって引き起こされるデータ セキュリティと世論リスクのリスクと責任、またはモデルが誤解されたり、悪用されたり、広められたり、不適切に利用されたりすることから生じるリスクと責任を負いません。
VisualGLM-6Bは画像説明に関する知識の質疑応答を行うことができます。
pip を使用して依存関係をインストールする
pip install -i https://pypi.org/simple -r requirements.txt
# 国内请使用aliyun镜像,TUNA等镜像同步最近出现问题,命令如下
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
現時点では、 deepspeed
ライブラリ ( sat
ライブラリのトレーニングをサポートする) がデフォルトでインストールされますが、このライブラリはモデル推論には必要ありません。同時に、一部の Windows 環境では、このライブラリをインストールするときに問題が発生します。 deepspeed
インストールをバイパスしたい場合は、コマンドを次のように変更できます。
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements_wo_ds.txt
pip install -i https://mirrors.aliyun.com/pypi/simple/ --no-deps "SwissArmyTransformer>=0.4.4"
Huggingface トランスフォーマー ライブラリを使用してモデルを呼び出す場合 (上記の依存関係パッケージもインストールする必要があります! )、次のコードを渡すことができます (イメージ パスはローカル パスです)。
from transformers import AutoTokenizer , AutoModel
tokenizer = AutoTokenizer . from_pretrained ( "THUDM/visualglm-6b" , trust_remote_code = True )
model = AutoModel . from_pretrained ( "THUDM/visualglm-6b" , trust_remote_code = True ). half (). cuda ()
image_path = "your image path"
response , history = model . chat ( tokenizer , image_path , "描述这张图片。" , history = [])
print ( response )
response , history = model . chat ( tokenizer , image_path , "这张图片可能是在什么场所拍摄的?" , history = history )
print ( response )
上記のコードはtransformers
によってモデルの実装とパラメーターを自動的にダウンロードします。完全なモデル実装は、Hugging Face Hub にあります。 Hugging Face Hub からモデル パラメーターをダウンロードするのが遅い場合は、ここからモデル パラメーター ファイルを手動でダウンロードし、モデルをローカルにロードできます。具体的な方法については、「ローカルからモデルをロードする」を参照してください。トランスフォーマー ライブラリ モデルに基づく定量化、CPU 推論、Mac MPS バックエンド アクセラレーションなどの詳細については、ChatGLM-6B の低コスト展開を参照してください。
SwissArmyTransformer ライブラリを使用してモデルを呼び出す場合、方法は同様です。環境変数SAT_HOME
使用してモデルのダウンロード場所を決定できます。このウェアハウス ディレクトリ内:
import argparse
from transformers import AutoTokenizer
tokenizer = AutoTokenizer . from_pretrained ( "THUDM/chatglm-6b" , trust_remote_code = True )
from model import chat , VisualGLMModel
model , model_args = VisualGLMModel . from_pretrained ( 'visualglm-6b' , args = argparse . Namespace ( fp16 = True , skip_init = True ))
from sat . model . mixins import CachedAutoregressiveMixin
model . add_mixin ( 'auto-regressive' , CachedAutoregressiveMixin ())
image_path = "your image path or URL"
response , history , cache_image = chat ( image_path , model , tokenizer , "描述这张图片。" , history = [])
print ( response )
response , history , cache_image = chat ( None , model , tokenizer , "这张图片可能是在什么场所拍摄的?" , history = history , image = cache_image )
print ( response )
パラメータの効率的な微調整も、 sat
ライブラリを使用して簡単に実行できます。
マルチモーダルなタスクは広範囲に分散されており、その種類も多く、事前トレーニングではすべてをカバーできないことがよくあります。 ここでは、20 個の注釈付き画像を使用して、「背景」の質問に答えるモデルの能力を強化する、小規模なサンプルの微調整の例を示します。
fewshot-data.zip
を解凍し、次のコマンドを実行します。
bash finetune/finetune_visualglm.sh
現在、次の 3 つの微調整方法がサポートされています。
--layer_range
および--lora_rank
パラメーターは、特定のシナリオとデータ量に応じて調整できます。bash finetune/finetune_visualglm_qlora.sh
の使用を検討できます。QLoRA は ChatGLM の線形レイヤーを 4 ビットで量子化し、微調整に必要なビデオ メモリは 9.8 GB のみです。--use_lora
--use_ptuning
に置き換えることができますが、モデル アプリケーション シナリオが非常に固定されている場合を除き、これはお勧めできません。トレーニング後は、次のコマンドを推論に使用できます。
python cli_demo.py --from_pretrained your_checkpoint_path --prompt_zh 这张图片的背景里有什么内容?
微調整する前に:
欢迎使用 VisualGLM-6B 模型,输入图像URL或本地路径读图,继续输入内容对话,clear 重新开始,stop 终止程序
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/2p.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:人们总是被生活琐事所困扰,无法摆脱束缚.
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/meme.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是一张狗的图片,它躺在木地板上。
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/passport.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是一台电脑键盘和两张护照。
用户:clear
请输入图像路径或URL(回车进入纯文本对话):
微調整後:
欢迎使用 VisualGLM-6B 模型,输入图像URL或本地路径读图,继续输入内容对话,clear 重新开始,stop 终止程序
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/2p.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是雨天,
用户:描述一下这张图片。
VisualGLM-6B:这张图片描绘了雨天的情景,雨水淅淅沥沥地落在地面上。人们穿着雨衣或雨伞,走在雨中,似乎在寻找着什么.
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/meme.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是木质地板。
用户:什么颜色的地板
VisualGLM-6B:这张图片的背景是蓝色的。
用户:描述一下这张图片。
VisualGLM-6B:这张图片描绘了一只棕色的小狗躺在蓝色的木质地板上。
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/passport.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是电脑键盘。
用户:描述一下这张图片。
VisualGLM-6B:这张图片的特点是电脑键盘和护照。
用户:有几张护照
VisualGLM-6B:两张护照。
用户:clear
请输入图像路径或URL(回车进入纯文本对话):
LoRA パーツのパラメータを元の重みにマージする場合は、次のようにmerge_lora()
を呼び出すことができます。
from finetune_visualglm import FineTuneVisualGLMModel
import argparse
model , args = FineTuneVisualGLMModel . from_pretrained ( 'checkpoints/finetune-visualglm-6b-05-19-07-36' ,
args = argparse . Namespace (
fp16 = True ,
skip_init = True ,
use_gpu_initialization = True ,
device = 'cuda' ,
))
model . get_mixin ( 'lora' ). merge_lora ()
args . layer_range = []
args . save = 'merge_lora'
args . mode = 'inference'
from sat . training . model_io import save_checkpoint
save_checkpoint ( 1 , model , None , None , args )
微調整には、 deepspeed
ライブラリのインストールが必要です。現在、このプロセスは Linux システムのみをサポートしています。近い将来、Windows システム用のさらに多くのサンプル命令とプロセス命令が完成する予定です。
python cli_demo.py
プログラムは、Sat モデルを自動的にダウンロードし、コマンド ラインで対話型の会話を実行します。応答を生成するには、「clear」と入力します。プログラムを終了するには、「stop」と入力します。
このプログラムは、生成プロセスと量子化精度を制御する次のハイパーパラメーターを提供します。
usage: cli_demo.py [-h] [--max_length MAX_LENGTH] [--top_p TOP_P] [--top_k TOP_K] [--temperature TEMPERATURE] [--english] [--quant {8,4}]
optional arguments:
-h, --help show this help message and exit
--max_length MAX_LENGTH
max length of the total sequence
--top_p TOP_P top p for nucleus sampling
--top_k TOP_K top k for top k sampling
--temperature TEMPERATURE
temperature for sampling
--english only output English
--quant {8,4} quantization bits
トレーニング中、英語の質問と回答のペアのプロンプト単語はQ: A:
: ですが、中国語のプロンプトは Web デモで使用されるため、英語の応答は悪くなります问:答:
必要に応じて中国語を混ぜます。英語で返信するには、 cli_demo.py
の--english
オプションを使用してください。
ChatGLM-6B
から継承したタイプライター効果コマンド ライン ツールも提供しています。このツールは Huggingface モデルを使用します。
python cli_demo_hf.py
また、モデルの並列マルチカード デプロイメントもサポートしています: (Sat の最新バージョンを更新する必要があります。以前にチェックポイントをダウンロードしたことがある場合は、それを手動で削除して再度ダウンロードする必要もあります)
torchrun --nnode 1 --nproc-per-node 2 cli_demo_mp.py
Gradio に基づいた Web バージョンのデモを提供します。まず Gradio をインストールします: pip install gradio
。 次に、このウェアハウスをダウンロードして入力し、 web_demo.py
を実行します。
git clone https://github.com/THUDM/VisualGLM-6B
cd VisualGLM-6B
python web_demo.py
プログラムは自動的にSatモデルをダウンロードし、Webサーバーを実行し、アドレスを出力します。出力アドレスをブラウザで開いて使用します。
ChatGLM-6B
から継承したタイプライター効果 Web バージョン ツールも提供しています。このツールは Huggingface モデルを使用し、起動後にポート:8080
で実行されます。
python web_demo_hf.py
どちらの Web バージョンのデモでも、コマンド ライン パラメーター--share
を受け入れて gradio パブリック リンクを生成し、 --quant 4
と--quant 8
を受け入れてそれぞれ 4 ビット量子化/8 ビット量子化を使用してビデオ メモリの使用量を削減します。
まず、追加の依存関係pip install fastapi uvicorn
インストールしてから、ウェアハウスで api.py を実行する必要があります。
python api.py
プログラムは、Sat モデルを自動的にダウンロードします。このモデルは、デフォルトでローカル ポート 8080 にデプロイされ、POST メソッドを通じて呼び出されます。以下は、 curl
使用してリクエストを行う例です。一般的に、code メソッドを使用して POST を実行することもできます。
echo " { " image " : " $( base64 path/to/example.jpg ) " , " text " : "描述这张图片" , " history " :[]} " > temp.json
curl -X POST -H " Content-Type: application/json " -d @temp.json http://127.0.0.1:8080
得られる戻り値は、
{
"response":"这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。",
"history":[('描述这张图片', '这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。')],
"status":200,
"time":"2023-05-16 20:20:10"
}
Huggingface モデルを使用する api_hf.py も提供しています。その使用方法は、Sat モデルの API と一致しています。
python api_hf.py
Huggingface の実装では、モデルはデフォルトで FP16 精度でロードされ、上記のコードを実行するには約 15 GB のビデオ メモリが必要です。 GPU のメモリが限られている場合は、量子化モードでモデルをロードしてみることができます。 使用方法:
# 按需修改,目前只支持 4/8 bit 量化。下面将只量化ChatGLM,ViT 量化时误差较大
model = AutoModel . from_pretrained ( "THUDM/visualglm-6b" , trust_remote_code = True ). quantize ( 8 ). half (). cuda ()
sat の実装では、最初にパラメータを渡して読み込み場所をcpu
に変更してから、定量化を実行する必要があります。メソッドは次のとおりです。詳細については、 cli_demo.py
参照してください。
from sat . quantization . kernels import quantize
quantize ( model , args . quant ). cuda ()
# 只需要 7GB 显存即可推理
このプロジェクトは V1 バージョンであり、視覚モデルと言語モデルのパラメータと計算量は比較的少ないため、主な改善の方向性を以下にまとめました。
このリポジトリのコードは、Apache-2.0 契約に従ってオープン ソースであり、VisualGLM-6B モデルの重みを使用するには、モデル ライセンスに準拠する必要があります。
私たちの研究が役立つと思われる場合は、次の論文を引用することを検討してください。
@inproceedings{du2022glm,
title={GLM: General Language Model Pretraining with Autoregressive Blank Infilling},
author={Du, Zhengxiao and Qian, Yujie and Liu, Xiao and Ding, Ming and Qiu, Jiezhong and Yang, Zhilin and Tang, Jie},
booktitle={Proceedings of the 60th Annual Meeting of the Association for Computational Linguistics (Volume 1: Long Papers)},
pages={320--335},
year={2022}
}
@article{ding2021cogview,
title={Cogview: Mastering text-to-image generation via transformers},
author={Ding, Ming and Yang, Zhuoyi and Hong, Wenyi and Zheng, Wendi and Zhou, Chang and Yin, Da and Lin, Junyang and Zou, Xu and Shao, Zhou and Yang, Hongxia and others},
journal={Advances in Neural Information Processing Systems},
volume={34},
pages={19822--19835},
year={2021}
}
VisualGLM-6B の命令微調整フェーズのデータ セットには、MiniGPT-4 および LLAVA プロジェクトの英語のグラフィック データとテキスト データの一部、および多くの古典的なクロスモーダル作業データ セットが含まれています。彼らに心から感謝します。貢献。