? HF Repo • ⚒️ SwissArmyTransformer (samedi) • ?
• ? [CogView@NeurIPS 21] [GitHub] • ? [GLM@ACL 22] [GitHub]
Rejoignez-nous sur Slack et WeChat
[2023.10] Bienvenue à prêter attention à CogVLM (https://github.com/THUDM/CogVLM), un modèle de dialogue multimodal de nouvelle génération de Zhipu AI. Il adopte la nouvelle architecture des experts visuels et a remporté la première place sur 10. tâches multimodales classiques faisant autorité. Le modèle anglais open source CogVLM-17B actuel sera basé sur le modèle chinois open source GLM.
VisualGLM-6B est un modèle de langage de dialogue multimodal open source qui prend en charge les images, le chinois et l'anglais . Le modèle de langage est basé sur ChatGLM-6B avec 6,2 milliards de paramètres ; modèle de langage grâce à la formation de BLIP2-Qformer, avec le modèle total comprenant 7,8 milliards de paramètres Cliquez ici pour la version anglaise.
VisualGLM-6B est un modèle de langage de dialogue multimodal open source qui prend en charge les images, le chinois et l'anglais . Le modèle de langage est basé sur ChatGLM-6B et comporte 6,2 milliards de paramètres. La partie image établit un pont entre le modèle visuel et le modèle de langage. en entraînant BLIP2-Qformer , le modèle global compte un total de 7,8 milliards de paramètres.
VisualGLM-6B s'appuie sur 30 millions de paires d'images et de textes chinois de haute qualité provenant de l'ensemble de données CogView et est pré-entraîné avec 300 millions de paires d'images et de textes anglais filtrés. Les poids du chinois et de l'anglais sont les mêmes. Cette méthode de formation aligne mieux les informations visuelles sur l'espace sémantique de ChatGLM ; lors de l'étape de réglage fin suivante, le modèle est formé sur de longues données visuelles de questions et de réponses pour générer des réponses conformes aux préférences humaines.
VisualGLM-6B est formé par la bibliothèque SwissArmyTransformer ( sat
en abrégé), qui est une bibliothèque d'outils qui prend en charge la modification et la formation flexibles de Transformer, et prend en charge des méthodes efficaces de réglage fin des paramètres tels que Lora et P-tuning. Ce projet fournit une interface huggingface conforme aux habitudes des utilisateurs, et fournit également une interface basée sur sat.
Combiné à la technologie de quantification de modèle, les utilisateurs peuvent le déployer localement sur des cartes graphiques grand public (le minimum requis est de 6,3 Go de mémoire vidéo au niveau de quantification INT4).
Le modèle open source VisualGLM-6B vise à promouvoir le développement de la technologie des grands modèles en collaboration avec la communauté open source. Les développeurs et chacun sont priés de respecter l'accord open source et de ne pas utiliser ce modèle open source, son code et ses dérivés. ce projet open source à des fins susceptibles de nuire au pays et à la société. Utilisations nocives et tout service dont la sécurité n'a pas été évaluée et documentée. Actuellement, ce projet n'a officiellement développé aucune application basée sur VisualGLM-6B, notamment des sites Web, des applications Android, des applications Apple iOS, des applications Windows, etc.
Étant donné que VisualGLM-6B est toujours dans la version v1, il est actuellement connu pour avoir un certain nombre de limitations , telles que des problèmes de factualité de description d'image/d'hallucination de modèle, une capture insuffisante d'informations détaillées sur l'image et certaines limitations des modèles de langage. Bien que le modèle s'efforce de garantir la conformité et l'exactitude des données à toutes les étapes de la formation, en raison de la petite échelle du modèle VisualGLM-6B et du fait que le modèle est affecté par des facteurs probabilistes et aléatoires, l'exactitude du contenu de sortie ne peut être garantie. , et le modèle est facilement trompeur (voir la section Limitations pour plus de détails). Dans les versions ultérieures de VisualGLM, des efforts seront déployés pour optimiser ces problèmes. Ce projet n'assume aucun risque ni responsabilité découlant des risques liés à la sécurité des données et à l'opinion publique causés par des modèles et des codes open source, ou par tout modèle induit en erreur, abusé, diffusé ou mal exploité.
VisualGLM-6B peut effectuer des connaissances liées aux questions et réponses sur la description de l'image.
Utilisez pip pour installer les dépendances
pip install -i https://pypi.org/simple -r requirements.txt
# 国内请使用aliyun镜像,TUNA等镜像同步最近出现问题,命令如下
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
À l'heure actuelle, deepspeed
(qui prend en charge la formation de la bibliothèque sat
) sera installée par défaut. Cette bibliothèque n'est pas nécessaire pour l'inférence de modèle. Dans le même temps, certains environnements Windows rencontreront des problèmes lors de l'installation de cette bibliothèque. Si nous voulons contourner l’installation deepspeed
, nous pouvons modifier la commande en
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"
Si vous utilisez la bibliothèque de transformateurs Huggingface pour appeler le modèle ( vous devez également installer le package de dépendances ci-dessus ! ), vous pouvez transmettre le code suivant (où le chemin de l'image est le chemin local) :
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 )
Le code ci - dessus téléchargera automatiquement l'implémentation du modèle et les paramètres par transformers
. La mise en œuvre complète du modèle peut être trouvée dans Hugging Face Hub. Si vous tardez à télécharger les paramètres du modèle depuis Hugging Face Hub, vous pouvez télécharger manuellement le fichier de paramètres du modèle à partir d'ici et charger le modèle localement. Pour des méthodes spécifiques, veuillez vous référer à Chargement du modèle depuis local. Pour plus d'informations sur la quantification, l'inférence CPU, l'accélération backend Mac MPS, etc. basées sur le modèle de bibliothèque de transformateurs, veuillez vous référer au déploiement à faible coût de ChatGLM-6B.
Si vous utilisez la bibliothèque SwissArmyTransformer pour appeler le modèle, la méthode est similaire. Vous pouvez utiliser la variable d'environnement SAT_HOME
pour déterminer l'emplacement de téléchargement du modèle. Dans ce répertoire d'entrepôt :
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 )
Un réglage fin et efficace des paramètres peut également être facilement effectué à l’aide de la bibliothèque sat
.
Les tâches multimodales sont largement réparties et de nombreux types, et la pré-formation ne peut souvent pas tout couvrir. Nous fournissons ici un exemple de réglage fin d'un petit échantillon, en utilisant 20 images annotées pour améliorer la capacité du modèle à répondre à des questions « de fond ».
Décompressez fewshot-data.zip
et exécutez la commande suivante :
bash finetune/finetune_visualglm.sh
Actuellement, trois méthodes de réglage fin sont prises en charge :
--layer_range
et --lora_rank
peuvent être ajustés en fonction du scénario spécifique et du volume de données.bash finetune/finetune_visualglm_qlora.sh
. QLoRA quantifie la couche linéaire de ChatGLM avec 4 bits et ne nécessite que 9,8 Go de mémoire vidéo pour le réglage fin.--use_lora
par --use_ptuning
, mais cela n'est pas recommandé à moins que le scénario d'application du modèle ne soit très fixe.Après la formation, vous pouvez utiliser la commande suivante pour l'inférence :
python cli_demo.py --from_pretrained your_checkpoint_path --prompt_zh 这张图片的背景里有什么内容?
Avant de peaufiner :
欢迎使用 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(回车进入纯文本对话):
Après mise au point :
欢迎使用 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(回车进入纯文本对话):
Si vous souhaitez fusionner les paramètres de la pièce LoRA dans les poids d'origine, vous pouvez appeler merge_lora()
, par exemple :
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 )
Le réglage fin nécessite l'installation de la bibliothèque deepspeed
. Actuellement, ce processus ne prend en charge que les systèmes Linux. D'autres exemples d'instructions et d'instructions de processus pour les systèmes Windows seront complétés dans un avenir proche.
python cli_demo.py
Le programme téléchargera automatiquement le modèle sat et mènera une conversation interactive sur la ligne de commande. Entrez les instructions et appuyez sur Entrée pour générer une réponse. Entrez clear pour effacer l'historique de la conversation. Entrez stop pour terminer le programme.
Le programme fournit les hyperparamètres suivants pour contrôler le processus de génération et la précision de la quantification :
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
Il convient de noter que pendant la formation, les mots d'invite pour les paires de questions et de réponses en anglais sont Q: A:
:, tandis que les invites chinoises sont问:答:
Les invites chinoises sont utilisées dans la démo Web, donc les réponses en anglais seront pires. et mélangé avec du chinois si nécessaire. Pour répondre en anglais, veuillez utiliser l'option --english
dans cli_demo.py
.
Nous fournissons également un outil de ligne de commande d'effet machine à écrire hérité de ChatGLM-6B
. Cet outil utilise le modèle Huggingface :
python cli_demo_hf.py
Nous prenons également en charge le déploiement multi-cartes parallèle de modèles : (Vous devez mettre à jour la dernière version de sat. Si vous avez déjà téléchargé le point de contrôle, vous devez également le supprimer manuellement et le télécharger à nouveau)
torchrun --nnode 1 --nproc-per-node 2 cli_demo_mp.py
Nous fournissons une version Web Démo basée sur Gradio. Installez d'abord Gradio : pip install gradio
. Ensuite, téléchargez et entrez dans cet entrepôt pour exécuter web_demo.py
:
git clone https://github.com/THUDM/VisualGLM-6B
cd VisualGLM-6B
python web_demo.py
Le programme téléchargera automatiquement le modèle sat, exécutera un serveur Web et affichera l'adresse. Ouvrez l'adresse de sortie dans un navigateur pour l'utiliser.
Nous fournissons également un outil de version web à effet machine à écrire hérité de ChatGLM-6B
. Cet outil utilise le modèle Huggingface et s'exécutera sur le port :8080
après le démarrage :
python web_demo_hf.py
Les deux démos de la version Web acceptent le paramètre de ligne de commande --share
pour générer des liens publics gradio, et acceptent --quant 4
et --quant 8
pour utiliser respectivement la quantification 4 bits/8 bits afin de réduire l'utilisation de la mémoire vidéo.
Tout d'abord, vous devez installer des dépendances supplémentaires pip install fastapi uvicorn
, puis exécuter api.py dans l'entrepôt :
python api.py
Le programme téléchargera automatiquement le modèle sat, qui est déployé par défaut sur le port local 8080 et appelé via la méthode POST. Ce qui suit est un exemple d'utilisation curl
pour demander. De manière générale, vous pouvez également utiliser la méthode code pour effectuer le 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
La valeur de retour obtenue est
{
"response":"这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。",
"history":[('描述这张图片', '这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。')],
"status":200,
"time":"2023-05-16 20:20:10"
}
Nous fournissons également api_hf.py qui utilise le modèle Huggingface. L'utilisation est cohérente avec l'API du modèle sat :
python api_hf.py
Dans l'implémentation Huggingface, le modèle est chargé par défaut avec la précision FP16 et l'exécution du code ci-dessus nécessite environ 15 Go de mémoire vidéo. Si votre GPU dispose de mémoire limitée, vous pouvez essayer de charger le modèle en mode quantifié. Comment l'utiliser :
# 按需修改,目前只支持 4/8 bit 量化。下面将只量化ChatGLM,ViT 量化时误差较大
model = AutoModel . from_pretrained ( "THUDM/visualglm-6b" , trust_remote_code = True ). quantize ( 8 ). half (). cuda ()
Dans l'implémentation sat, vous devez d'abord transmettre le paramètre pour changer l'emplacement de chargement en cpu
, puis effectuer une quantification. La méthode est la suivante, voir cli_demo.py
pour plus de détails :
from sat . quantization . kernels import quantize
quantize ( model , args . quant ). cuda ()
# 只需要 7GB 显存即可推理
Ce projet est en version V1. Les paramètres et le volume de calcul des modèles visuels et linguistiques sont relativement faibles. Nous avons résumé les principales orientations d'amélioration comme suit :
Le code de ce référentiel est open source selon l'accord Apache-2.0. L'utilisation des poids du modèle VisualGLM-6B doit être conforme à la Model License.
Si vous trouvez notre travail utile, pensez à citer les articles suivants
@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}
}
L'ensemble de données de la phase de mise au point des instructions de VisualGLM-6B contient une partie des données graphiques et textuelles en anglais des projets MiniGPT-4 et LLAVA, ainsi que de nombreux ensembles de données de travail intermodaux classiques. Nous les remercions sincèrement pour leur travail. cotisations.