? HF Repo • ⚒️ SwissArmyTransformer (sat) • ?
• ?[CogView@NeurIPS 21] [GitHub] • ?[GLM@ACL 22] [GitHub]
انضم إلينا على Slack وWeChat
[2023.10] مرحبًا بكم في الاهتمام بـ CogVLM (https://github.com/THUDM/CogVLM)، وهو نموذج حوار متعدد الوسائط من الجيل الجديد لـ Zhipu AI وهو يعتمد البنية الجديدة للخبراء البصريين وفاز بالمركز الأول في 10 مهام كلاسيكية متعددة الوسائط. سيعتمد النموذج الإنجليزي مفتوح المصدر الحالي CogVLM-17B على النموذج الصيني مفتوح المصدر من GLM.
VisualGLM-6B هو نموذج لغة حوار مفتوح المصدر ومتعدد الوسائط يدعم الصور والصينية والإنجليزية . يعتمد نموذج اللغة على ChatGLM-6B مع 6.2 مليار معلمة، ويبني جزء الصورة جسرًا بين النموذج المرئي و نموذج اللغة من خلال تدريب BLIP2-Qformer، حيث يشتمل النموذج الإجمالي على 7.8 مليار معلمة. انقر هنا للحصول على النسخة الإنجليزية.
VisualGLM-6B هو نموذج لغة حوار متعدد الوسائط مفتوح المصدر يدعم الصور والصينية والإنجليزية . يعتمد نموذج اللغة على ChatGLM-6B ويحتوي على 6.2 مليار معلمة. يقوم جزء الصورة ببناء جسر بين النموذج المرئي ونموذج اللغة من خلال تدريب BLIP2-Qformer، يحتوي النموذج العام على إجمالي 7.8 مليار معلمة.
يعتمد VisualGLM-6B على 30 مليون زوج من الصور والنصوص الصينية عالية الجودة من مجموعة بيانات CogView و300 مليون زوج من الصور والنص باللغة الإنجليزية للتدريب المسبق، وهي نفسها. تعمل طريقة التدريب هذه على محاذاة المعلومات المرئية بشكل أفضل مع المساحة الدلالية لـ ChatGLM؛ وفي مرحلة الضبط الدقيق اللاحقة، يتم تدريب النموذج على بيانات الأسئلة والأجوبة المرئية الطويلة لإنشاء إجابات تتوافق مع التفضيلات البشرية.
تم تدريب VisualGLM-6B بواسطة مكتبة SwissArmyTransformer ( sat
للاختصار)، وهي مكتبة أدوات تدعم التعديل المرن والتدريب على Transformer، وتدعم أساليب الضبط الدقيق الفعالة للمعلمات مثل Lora وP-tuning. يوفر هذا المشروع واجهة تعانق الوجه تتوافق مع عادات المستخدم، كما يوفر أيضًا واجهة تعتمد على الأقمار الصناعية.
إلى جانب تقنية تكميم النموذج، يمكن للمستخدمين نشرها محليًا على بطاقات رسومية من فئة المستهلك (الحد الأدنى المطلوب هو 6.3 جيجا بايت من ذاكرة الفيديو على مستوى التكميم INT4).
يهدف نموذج VisualGLM-6B مفتوح المصدر إلى تعزيز تطوير تكنولوجيا النماذج الكبيرة جنبًا إلى جنب مع مجتمع المصادر المفتوحة، ويرجى من المطورين والجميع الالتزام باتفاقية المصدر المفتوح وعدم استخدام نموذج المصدر المفتوح والتعليمات البرمجية والمشتقات القائمة على هذا. هذا المشروع مفتوح المصدر لأي غرض قد يلحق الضرر بالبلد والمجتمع والاستخدامات الضارة وأي خدمات لم يتم تقييم وتوثيق سلامتها. في الوقت الحالي، لم يقم هذا المشروع رسميًا بتطوير أي تطبيقات تعتمد على VisualGLM-6B، بما في ذلك مواقع الويب وتطبيقات Android وتطبيقات Apple iOS وتطبيقات Windows وما إلى ذلك.
نظرًا لأن VisualGLM-6B لا يزال في الإصدار v1، فمن المعروف حاليًا أن به عددًا لا بأس به من القيود ، مثل مشاكل وصف الصورة/الهلوسة النموذجية، وعدم كفاية التقاط معلومات تفاصيل الصورة، وبعض القيود من نماذج اللغة. على الرغم من أن النموذج يبذل قصارى جهده لضمان الامتثال ودقة البيانات في كل مرحلة من مراحل التدريب، وذلك بسبب صغر حجم نموذج VisualGLM-6B وحقيقة تأثر النموذج بالعوامل الاحتمالية والعشوائية، إلا أن دقة النموذج لا يمكن ضمان محتوى الإخراج، والنموذج مضلل بسهولة (راجع قسم القيود للحصول على التفاصيل). في الإصدارات اللاحقة من VisualGLM، سيتم بذل الجهود لتحسين مثل هذه المشكلات. لا يتحمل هذا المشروع مخاطر ومسؤوليات مخاطر أمن البيانات والرأي العام الناجمة عن النماذج والأكواد مفتوحة المصدر، أو المخاطر والمسؤوليات الناشئة عن تضليل أي نموذج أو إساءة استخدامه أو نشره أو استغلاله بشكل غير صحيح.
يمكن لـ VisualGLM-6B تنفيذ الأسئلة والأجوبة المتعلقة بالمعرفة المتعلقة بوصف الصورة.
استخدم النقطة لتثبيت التبعيات
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، فيمكنك تنزيل ملف معلمات النموذج يدويًا من هنا وتحميل النموذج محليًا. للتعرف على طرق محددة، يرجى الرجوع إلى تحميل النموذج من الموقع المحلي. للحصول على معلومات حول القياس الكمي، واستدلال وحدة المعالجة المركزية، وتسريع الواجهة الخلفية لنظام التشغيل 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
حاليًا، يتم دعم ثلاث طرق للضبط الدقيق:
--layer_range
و- --lora_rank
وفقًا للسيناريو المحدد وحجم البيانات.bash finetune/finetune_visualglm_qlora.sh
تقوم QLoRA بتكميم الطبقة الخطية لـ ChatGLM باستخدام 4 بت وتتطلب فقط 9.8 جيجابايت من ذاكرة الفيديو للضبط الدقيق.--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 وإجراء محادثة تفاعلية على سطر الأوامر. أدخل التعليمات واضغط على Enter لإنشاء رد. أدخل واضحًا لمسح سجل المحادثة. أدخل توقف لإنهاء البرنامج.
يوفر البرنامج المعلمات الفائقة التالية للتحكم في عملية التوليد ودقة القياس الكمي:
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:
:، بينما تكون المطالبات الصينية هي问:答:
يتم استخدام المطالبات الصينية في العرض التوضيحي على الويب، وبالتالي فإن الاستجابات الإنجليزية ستكون أسوأ ومختلطة بالصينية إذا لزم الأمر للرد باللغة الإنجليزية، يرجى استخدام خيار --english
في cli_demo.py
.
نوفر أيضًا أداة سطر أوامر لتأثير الآلة الكاتبة موروثة من ChatGLM-6B
. تستخدم هذه الأداة نموذج Huggingface:
python cli_demo_hf.py
نحن ندعم أيضًا النشر المتوازي متعدد البطاقات للنماذج: (تحتاج إلى تحديث أحدث إصدار من sat. إذا قمت بتنزيل نقطة التفتيش من قبل، فستحتاج أيضًا إلى حذفها يدويًا وتنزيلها مرة أخرى)
torchrun --nnode 1 --nproc-per-node 2 cli_demo_mp.py
نحن نقدم إصدارًا تجريبيًا لإصدار الويب استنادًا إلى Gradio. قم أولاً بتثبيت Gradio: pip install gradio
. ثم قم بتنزيل هذا المستودع وأدخله لتشغيل web_demo.py
:
git clone https://github.com/THUDM/VisualGLM-6B
cd VisualGLM-6B
python web_demo.py
سيقوم البرنامج تلقائيًا بتنزيل نموذج القمر الصناعي وتشغيل خادم الويب وإخراج العنوان. افتح عنوان الإخراج في المتصفح لاستخدامه.
نوفر أيضًا أداة إصدار ويب لتأثير الآلة الكاتبة الموروثة من ChatGLM-6B
. تستخدم هذه الأداة نموذج Huggingface وسيتم تشغيلها على المنفذ :8080
بعد بدء التشغيل:
python web_demo_hf.py
يقبل كلا الإصدارين التجريبيين لإصدار الويب معلمة سطر الأوامر --share
لإنشاء روابط عامة متدرجة، ويقبلان --quant 4
و --quant 8
لاستخدام التكميم 4 بت/ التكميم 8 بت على التوالي لتقليل استخدام ذاكرة الفيديو.
أولاً، تحتاج إلى تثبيت تبعيات إضافية pip install fastapi uvicorn
، ثم تشغيل api.py في المستودع:
python api.py
سيقوم البرنامج تلقائيًا بتنزيل نموذج sat، والذي يتم نشره على المنفذ المحلي 8080 افتراضيًا ويتم استدعاؤه من خلال طريقة POST. ما يلي هو مثال على استخدام curl
للطلب بشكل عام، يمكنك أيضًا استخدام طريقة التعليمات البرمجية لتنفيذ 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"
}
نوفر أيضًا api_hf.py الذي يستخدم نموذج Huggingface، ويتوافق الاستخدام مع واجهة برمجة التطبيقات الخاصة بنموذج sat:
python api_hf.py
في تطبيق Huggingface، يتم تحميل النموذج بدقة FP16 افتراضيًا، ويتطلب تشغيل الكود أعلاه حوالي 15 جيجابايت من ذاكرة الفيديو. إذا كانت ذاكرة وحدة معالجة الرسومات الخاصة بك محدودة، فيمكنك محاولة تحميل النموذج في الوضع الكمي. كيفية استخدامه:
# 按需修改,目前只支持 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، بالإضافة إلى العديد من مجموعات بيانات العمل الكلاسيكية متعددة الوسائط المساهمات.