? HF Repo • ⚒️ SwissArmyTransformer (sa) • ?
• ? [CogView@NeurIPS 21] [GitHub] • ? [GLM@ACL 22] [GitHub]
Begleiten Sie uns auf Slack und WeChat
[2023.10] Willkommen bei CogVLM (https://github.com/THUDM/CogVLM), einem multimodalen Dialogmodell der neuen Generation von Zhipu AI. Es übernimmt die neue Architektur visueller Experten und gewann den ersten Platz Durchführung klassischer multimodaler Aufgaben. Das aktuelle englische Open-Source-Modell CogVLM-17B basiert auf dem chinesischen Open-Source-Modell GLM.
VisualGLM-6B ist ein Open-Source-Multimodal-Dialog-Sprachmodell, das Bilder, Chinesisch und Englisch unterstützt. Das Sprachmodell basiert auf ChatGLM-6B mit 6,2 Milliarden Parametern und bildet eine Brücke zwischen dem visuellen Modell und dem Sprachmodell durch das Training von BLIP2-Qformer, wobei das Gesamtmodell 7,8 Milliarden Parameter umfasst. Klicken Sie hier für die englische Version.
VisualGLM-6B ist ein multimodales Open-Source-Dialog-Sprachmodell, das Bilder, Chinesisch und Englisch unterstützt. Das Sprachmodell basiert auf ChatGLM-6B und verfügt über 6,2 Milliarden Parameter. Der Bildteil bildet eine Brücke zwischen dem visuellen Modell und dem Sprachmodell Durch das Training von BLIP2-Qformer verfügt das Gesamtmodell über insgesamt 7,8 Milliarden Parameter.
VisualGLM-6B stützt sich auf 30 Millionen hochwertige chinesische Bild-Text-Paare aus dem CogView-Datensatz und 300 Millionen gescreente englische Bild-Text-Paare für das Vortraining. Chinesische und englische Gewichtungen sind gleich. Diese Trainingsmethode richtet visuelle Informationen besser auf den semantischen Raum von ChatGLM aus. In der anschließenden Feinabstimmungsphase wird das Modell anhand langer visueller Frage- und Antwortdaten trainiert, um Antworten zu generieren, die den menschlichen Vorlieben entsprechen.
VisualGLM-6B wird von der SwissArmyTransformer-Bibliothek (kurz sat
) trainiert, einer Werkzeugbibliothek, die flexible Modifikationen und Schulungen von Transformer unterstützt und effiziente Feinabstimmungsmethoden für Parameter wie Lora und P-Tuning unterstützt. Dieses Projekt bietet eine Huggingface-Schnittstelle, die den Benutzergewohnheiten entspricht, und bietet außerdem eine auf Sat basierende Schnittstelle.
In Kombination mit der Modellquantisierungstechnologie können Benutzer es lokal auf Grafikkarten der Verbraucherklasse bereitstellen (das erforderliche Minimum sind 6,3 GB Videospeicher auf der INT4-Quantisierungsebene).
Das Open-Source-Modell VisualGLM-6B zielt darauf ab, die Entwicklung großer Modelltechnologie gemeinsam mit der Open-Source-Community zu fördern. Entwickler und alle werden gebeten, sich an die Open-Source-Vereinbarung zu halten und dieses Open-Source-Modell sowie darauf basierende Codes und Derivate nicht zu verwenden dieses Open-Source-Projekt für jeden Zweck, der dem Land und der Gesellschaft Schaden zufügen könnte, und für alle Dienste, deren Sicherheit nicht bewertet und dokumentiert wurde. Derzeit hat dieses Projekt offiziell keine Anwendungen entwickelt, die auf VisualGLM-6B basieren, einschließlich Websites, Android-Apps, Apple iOS-Anwendungen, Windows-Apps usw.
Da sich VisualGLM-6B noch in der v1-Version befindet, ist derzeit bekannt, dass es einige Einschränkungen aufweist, wie z. B. Probleme mit der Faktizität der Bildbeschreibung/Modellhalluzination, unzureichende Erfassung von Bilddetailinformationen und einige Einschränkungen durch Sprachmodelle. Obwohl das Modell sein Bestes gibt, um die Konformität und Genauigkeit der Daten in jeder Phase des Trainings sicherzustellen, ist die Genauigkeit des VisualGLM-6B-Modells aufgrund des geringen Maßstabs des VisualGLM-6B-Modells und der Tatsache, dass das Modell durch Wahrscheinlichkeits- und Zufallsfaktoren beeinflusst wird, beeinträchtigt Der Ausgabeinhalt kann nicht garantiert werden und das Modell ist leicht irreführend (Einzelheiten finden Sie im Abschnitt „Einschränkungen“). In nachfolgenden Versionen von VisualGLM werden Anstrengungen unternommen, solche Probleme zu optimieren. Dieses Projekt trägt nicht die Risiken und Verantwortlichkeiten der Datensicherheit und Risiken für die öffentliche Meinung, die durch Open-Source-Modelle und -Codes verursacht werden, oder die Risiken und Verantwortlichkeiten, die sich aus der Irreführung, dem Missbrauch, der Verbreitung oder der missbräuchlichen Nutzung von Modellen ergeben.
VisualGLM-6B kann frage- und antwortbezogene Kenntnisse zur Bildbeschreibung durchführen.
Verwenden Sie pip, um Abhängigkeiten zu installieren
pip install -i https://pypi.org/simple -r requirements.txt
# 国内请使用aliyun镜像,TUNA等镜像同步最近出现问题,命令如下
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
Zu diesem Zeitpunkt wird deepspeed
-Bibliothek (die das sat
-Bibliothekstraining unterstützt) standardmäßig installiert. Diese Bibliothek ist für die Modellinferenz nicht erforderlich. Gleichzeitig treten bei der Installation dieser Bibliothek Probleme auf. Wenn wir die deepspeed
-Installation umgehen möchten, können wir den Befehl in ändern
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"
Wenn Sie die Huggingface-Transformer-Bibliothek verwenden, um das Modell aufzurufen ( Sie müssen auch das obige Abhängigkeitspaket installieren! ), können Sie den folgenden Code übergeben (wobei der Bildpfad der lokale Pfad ist):
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 )
Der obige Code lädt automatisch die Modellimplementierung und die Parameter durch transformers
herunter. Die vollständige Modellimplementierung finden Sie in Hugging Face Hub. Wenn Sie die Modellparameter nur langsam von Hugging Face Hub herunterladen, können Sie die Modellparameterdatei manuell von hier herunterladen und das Modell lokal laden. Spezifische Methoden finden Sie unter Laden des Modells von lokal. Informationen zu Quantifizierung, CPU-Inferenz, Mac MPS-Backend-Beschleunigung usw. basierend auf dem Transformers-Bibliotheksmodell finden Sie in der kostengünstigen Bereitstellung von ChatGLM-6B.
Wenn Sie die SwissArmyTransformer-Bibliothek zum Aufrufen des Modells verwenden, ist die Methode ähnlich. Sie können die Umgebungsvariable SAT_HOME
verwenden, um den Speicherort des Modell-Downloads zu bestimmen. In diesem Lagerverzeichnis:
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 )
Auch eine effiziente Feinabstimmung der Parameter lässt sich problemlos über die sat
-Bibliothek durchführen.
Multimodale Aufgaben sind weitverbreitet und vielfältiger Art und eine Vorschulung kann oft nicht alles abdecken. Hier stellen wir ein Beispiel für die Feinabstimmung kleiner Stichproben vor, bei dem wir 20 kommentierte Bilder verwenden, um die Fähigkeit des Modells zu verbessern, „Hintergrund“-Fragen zu beantworten.
Entpacken Sie fewshot-data.zip
und führen Sie den folgenden Befehl aus:
bash finetune/finetune_visualglm.sh
Derzeit werden drei Methoden zur Feinabstimmung unterstützt:
--layer_range
und --lora_rank
können je nach Szenario und Datenvolumen angepasst werden.bash finetune/finetune_visualglm_qlora.sh
in Betracht ziehen. QLoRA quantisiert die lineare Ebene von ChatGLM mit 4 Bit und benötigt für die Feinabstimmung nur 9,8 GB Videospeicher.--use_lora
durch --use_ptuning
ersetzen, dies wird jedoch nicht empfohlen, es sei denn, das Modellanwendungsszenario ist sehr fest.Nach dem Training können Sie den folgenden Befehl zur Inferenz verwenden:
python cli_demo.py --from_pretrained your_checkpoint_path --prompt_zh 这张图片的背景里有什么内容?
Vor der Feinabstimmung:
欢迎使用 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(回车进入纯文本对话):
Nach der Feinabstimmung:
欢迎使用 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(回车进入纯文本对话):
Wenn Sie die Parameter des LoRA-Teils mit den Originalgewichten zusammenführen möchten, können Sie merge_lora()
aufrufen, zum Beispiel:
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 )
Für die Feinabstimmung ist die Installation der deepspeed
-Bibliothek erforderlich. Derzeit unterstützt dieser Prozess nur Linux-Systeme. Weitere Beispielanweisungen und Prozessanweisungen für Windows-Systeme werden in naher Zukunft fertiggestellt.
python cli_demo.py
Das Programm lädt das Sat-Modell automatisch herunter und führt eine interaktive Konversation in der Befehlszeile durch. Drücken Sie die Eingabetaste, um eine Antwort zu generieren. Geben Sie „Stopp“ ein, um den Konversationsverlauf zu löschen.
Das Programm stellt die folgenden Hyperparameter zur Steuerung des Generierungsprozesses und der Quantisierungsgenauigkeit bereit:
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
Es ist zu beachten, dass während des Trainings die Eingabeaufforderungswörter für englische Frage- und Antwortpaare Q: A:
:问:答:
, während die chinesischen Eingabeaufforderungen in der Webdemo verwendet werden, sodass die englischen Antworten schlechter ausfallen und bei Bedarf mit Chinesisch gemischt. Um auf Englisch zu antworten, verwenden Sie bitte die Option --english
in cli_demo.py
.
Wir bieten auch ein von ChatGLM-6B
übernommenes Befehlszeilentool für Schreibmaschineneffekte an. Dieses Tool verwendet das Huggingface-Modell:
python cli_demo_hf.py
Wir unterstützen auch die parallele Bereitstellung von Modellen mit mehreren Karten: (Sie müssen die neueste Version von Sat aktualisieren. Wenn Sie Checkpoint zuvor heruntergeladen haben, müssen Sie es auch manuell löschen und erneut herunterladen.)
torchrun --nnode 1 --nproc-per-node 2 cli_demo_mp.py
Wir bieten eine Webversion-Demo basierend auf Gradio an. Installieren Sie zunächst Gradio: pip install gradio
. Laden Sie dann dieses Warehouse herunter und betreten Sie es, um web_demo.py
auszuführen:
git clone https://github.com/THUDM/VisualGLM-6B
cd VisualGLM-6B
python web_demo.py
Das Programm lädt automatisch das Sat-Modell herunter, betreibt einen Webserver und gibt die Adresse aus. Öffnen Sie die Ausgabeadresse in einem Browser, um sie zu verwenden.
Wir bieten auch ein von ChatGLM-6B
geerbtes Schreibmaschineneffekt-Webversionstool an. Dieses Tool verwendet das Huggingface-Modell und wird nach dem Start auf Port :8080
ausgeführt:
python web_demo_hf.py
Beide Webversions-Demos akzeptieren den Befehlszeilenparameter --share
, um öffentliche Gradio-Links zu generieren, und akzeptieren --quant 4
und --quant 8
um 4-Bit-Quantisierung bzw. 8-Bit-Quantisierung zu verwenden, um die Videospeichernutzung zu reduzieren.
Zuerst müssen Sie zusätzliche Abhängigkeiten installieren pip install fastapi uvicorn
und dann api.py im Warehouse ausführen:
python api.py
Das Programm lädt automatisch das Sat-Modell herunter, das standardmäßig auf dem lokalen Port 8080 bereitgestellt und über die POST-Methode aufgerufen wird. Das Folgende ist ein Beispiel für die Verwendung von curl
zum Anfordern. Im Allgemeinen können Sie auch die Code-Methode zum Ausführen von POST verwenden.
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
Der erhaltene Rückgabewert ist
{
"response":"这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。",
"history":[('描述这张图片', '这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。')],
"status":200,
"time":"2023-05-16 20:20:10"
}
Wir stellen auch api_hf.py bereit, das das Huggingface-Modell verwendet. Die Verwendung stimmt mit der API des Sat-Modells überein:
python api_hf.py
In der Huggingface-Implementierung wird das Modell standardmäßig mit FP16-Präzision geladen und die Ausführung des obigen Codes erfordert etwa 15 GB Videospeicher. Wenn Ihre GPU nur über begrenzten Speicher verfügt, können Sie versuchen, das Modell im quantisierten Modus zu laden. So verwenden Sie es:
# 按需修改,目前只支持 4/8 bit 量化。下面将只量化ChatGLM,ViT 量化时误差较大
model = AutoModel . from_pretrained ( "THUDM/visualglm-6b" , trust_remote_code = True ). quantize ( 8 ). half (). cuda ()
In der Sat-Implementierung müssen Sie zunächst den Parameter übergeben, um den Ladeort in cpu
zu ändern, und dann die Quantifizierung durchführen. Die Methode ist wie folgt. Weitere Informationen finden Sie in cli_demo.py
:
from sat . quantization . kernels import quantize
quantize ( model , args . quant ). cuda ()
# 只需要 7GB 显存即可推理
Dieses Projekt liegt in der V1-Version vor. Die Parameter und der Berechnungsumfang der visuellen und sprachlichen Modelle sind relativ gering. Wir haben die wichtigsten Verbesserungsrichtungen wie folgt zusammengefasst:
Der Code dieses Repositorys ist Open Source gemäß der Apache-2.0-Vereinbarung. Die Verwendung der Gewichte des VisualGLM-6B-Modells muss der Modelllizenz entsprechen.
Wenn Sie unsere Arbeit hilfreich finden, denken Sie bitte darüber nach, die folgenden Dokumente zu zitieren
@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}
}
Der Datensatz in der Anweisungsfeinabstimmungsphase von VisualGLM-6B umfasst einen Teil der englischen Grafik- und Textdaten aus den Projekten MiniGPT-4 und LLAVA sowie viele klassische modalübergreifende Arbeitsdatensätze. Wir danken ihnen aufrichtig Beiträge.