HF Репо • ⚒️ SwissArmyTransformer (сб) • ?
• ? [CogView@NeurIPS 21] [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-настройка. Этот проект предоставляет интерфейс Huggingface, соответствующий привычкам пользователя, а также предоставляет интерфейс, основанный на спутниковых данных.
В сочетании с технологией квантования модели пользователи могут развертывать ее локально на видеокартах потребительского уровня (минимально необходимый объем — 6,3 ГБ видеопамяти на уровне квантования INT4).
Модель с открытым исходным кодом VisualGLM-6B направлена на содействие развитию технологии больших моделей совместно с сообществом разработчиков открытого исходного кода. Разработчиков и всех просят соблюдать соглашение об открытом исходном коде и не использовать эту модель с открытым исходным кодом, а также код и производные на его основе. этот проект с открытым исходным кодом для любых целей, которые могут нанести вред стране и обществу. Вредное использование и любые услуги, безопасность которых не была оценена и задокументирована. В настоящее время этот проект официально не разработал никаких приложений на основе VisualGLM-6B, включая веб-сайты, приложения для Android, приложения для Apple iOS, приложения для Windows и т. д.
Поскольку 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, вы можете вручную загрузить файл параметров модели отсюда и загрузить модель локально. Конкретные методы см. в разделе Загрузка модели из локального хранилища. Информацию о количественном анализе, выводе ЦП, ускорении серверной части 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
Программа автоматически загрузит модель спутника и проведет интерактивный диалог в командной строке. Введите инструкции и нажмите Enter, чтобы сгенерировать ответ. Очистите историю разговоров. Введите 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:
:, тогда как подсказки на китайском языке —问:答:
В веб-демо используются подсказки на китайском языке, поэтому ответы на английском языке будут хуже. и при необходимости смешанный с китайским. Чтобы ответить на английском языке, используйте опцию --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
для создания общедоступных ссылок Gradio, а также принимают --quant 4
и --quant 8
для использования 4-битного квантования/8-битного квантования соответственно для уменьшения использования видеопамяти.
Сначала вам нужно установить дополнительные зависимости pip install fastapi uvicorn
, а затем запустить api.py на складе:
python api.py
Программа автоматически загрузит модель спутника, которая по умолчанию разворачивается на локальном порту 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. Использование соответствует API спутниковой модели:
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, а также множество классических кросс-модальных рабочих наборов данных. Мы искренне благодарим их за это. взносы.