? Repo HF • ⚒️ SwissArmyTransformer (sabtu) • ?
• ?
Bergabunglah dengan kami di Slack dan WeChat
[2023.10] Selamat memperhatikan CogVLM (https://github.com/THUDM/CogVLM), model dialog multi-modal generasi baru dari Zhipu AI. Model ini mengadopsi arsitektur baru pakar visual dan memenangkan tempat pertama di 10 tugas multi-modal klasik yang otoritatif. Model bahasa Inggris CogVLM-17B open source saat ini akan didasarkan pada model Cina open source GLM.
VisualGLM-6B adalah model bahasa dialog multi-modal sumber terbuka yang mendukung gambar, Mandarin, dan Inggris . Model bahasa didasarkan pada ChatGLM-6B dengan 6,2 miliar parameter; model bahasa melalui pelatihan BLIP2-Qformer, dengan total model terdiri dari 7,8 miliar parameter. Klik di sini untuk versi bahasa Inggris.
VisualGLM-6B adalah model bahasa dialog multi-modal sumber terbuka yang mendukung gambar, Cina dan Inggris . Model bahasa didasarkan pada ChatGLM-6B dan memiliki 6,2 miliar parameter. Bagian gambar membangun jembatan antara model visual dan model bahasa dengan melatih BLIP2-Qformer. , model keseluruhan memiliki total 7,8 miliar parameter.
VisualGLM-6B mengandalkan 30 juta pasangan teks gambar berbahasa Mandarin berkualitas tinggi dari kumpulan data CogView dan 300 juta pasangan teks gambar berbahasa Inggris yang disaring untuk pra-pelatihan. Bobot bahasa Mandarin dan Inggris sama. Metode pelatihan ini menyelaraskan informasi visual dengan ruang semantik ChatGLM dengan lebih baik; pada tahap penyesuaian berikutnya, model dilatih pada data tanya jawab visual yang panjang untuk menghasilkan jawaban yang sesuai dengan preferensi manusia.
VisualGLM-6B dilatih oleh perpustakaan SwissArmyTransformer (singkatnya sat
), yang merupakan perpustakaan alat yang mendukung modifikasi dan pelatihan Transformer yang fleksibel, dan mendukung metode penyesuaian parameter yang efisien seperti Lora dan P-tuning. Proyek ini menyediakan antarmuka pelukan yang sesuai dengan kebiasaan pengguna, dan juga menyediakan antarmuka berdasarkan sat.
Dikombinasikan dengan teknologi kuantisasi model, pengguna dapat menerapkannya secara lokal pada kartu grafis tingkat konsumen (minimum yang diperlukan adalah memori video 6,3G pada tingkat kuantisasi INT4).
Model sumber terbuka VisualGLM-6B bertujuan untuk mempromosikan pengembangan teknologi model besar bersama dengan komunitas sumber terbuka. Pengembang dan semua orang diminta untuk mematuhi perjanjian sumber terbuka dan tidak menggunakan model dan kode sumber terbuka serta turunannya berdasarkan pada ini. proyek sumber terbuka ini untuk tujuan apa pun yang dapat membahayakan negara dan masyarakat. Penggunaan berbahaya dan layanan apa pun yang belum dinilai dan didokumentasikan keamanannya. Saat ini, proyek ini belum secara resmi mengembangkan aplikasi apa pun berdasarkan VisualGLM-6B, termasuk situs web, Aplikasi Android, aplikasi Apple iOS, Aplikasi Windows, dll.
Karena VisualGLM-6B masih dalam versi v1, saat ini diketahui memiliki beberapa keterbatasan , seperti masalah faktualitas deskripsi gambar/halusinasi model, pengambilan informasi detail gambar yang tidak memadai, dan beberapa keterbatasan dari model bahasa. Meskipun model mencoba yang terbaik untuk memastikan kepatuhan dan keakuratan data pada setiap tahap pelatihan, karena skala model VisualGLM-6B yang kecil dan fakta bahwa model tersebut dipengaruhi oleh faktor probabilistik dan acak, keakuratan model konten keluaran tidak dapat dijamin, dan modelnya mudah menyesatkan (lihat bagian Batasan untuk detailnya). Dalam versi VisualGLM berikutnya, upaya akan dilakukan untuk mengoptimalkan masalah tersebut. Proyek ini tidak menanggung risiko dan tanggung jawab atas keamanan data dan risiko opini publik yang disebabkan oleh model dan kode sumber terbuka, atau risiko dan tanggung jawab yang timbul dari model apa pun yang disesatkan, disalahgunakan, disebarluaskan, atau dieksploitasi secara tidak patut.
VisualGLM-6B dapat melakukan tanya jawab terkait pengetahuan deskripsi gambar.
Gunakan pip untuk menginstal dependensi
pip install -i https://pypi.org/simple -r requirements.txt
# 国内请使用aliyun镜像,TUNA等镜像同步最近出现问题,命令如下
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
Saat ini, perpustakaan deepspeed
(yang mendukung pelatihan perpustakaan sat
) akan diinstal secara default. Perpustakaan ini tidak diperlukan untuk inferensi model. Pada saat yang sama, beberapa lingkungan Windows akan mengalami masalah saat menginstal perpustakaan ini. Jika kita ingin mem-bypass instalasi deepspeed
, kita dapat mengubah perintah menjadi
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"
Jika Anda menggunakan pustaka transformator Huggingface untuk memanggil model ( Anda juga perlu menginstal paket ketergantungan di atas! ), Anda dapat meneruskan kode berikut (di mana jalur gambar adalah jalur lokal):
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 )
Kode di atas akan secara otomatis mengunduh implementasi model dan parameter transformers
. Implementasi model selengkapnya dapat ditemukan di Hugging Face Hub. Jika Anda lambat mengunduh parameter model dari Hugging Face Hub, Anda dapat mengunduh file parameter model secara manual dari sini dan memuat model secara lokal. Untuk metode spesifik, lihat Memuat model dari lokal. Untuk informasi tentang kuantifikasi, inferensi CPU, akselerasi backend Mac MPS, dll. berdasarkan model perpustakaan transformator, silakan lihat penerapan ChatGLM-6B yang berbiaya rendah.
Jika Anda menggunakan perpustakaan SwissArmyTransformer untuk memanggil model, metodenya serupa. Anda dapat menggunakan variabel lingkungan SAT_HOME
untuk menentukan lokasi pengunduhan model. Di direktori gudang ini:
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 )
Penyempurnaan parameter yang efisien juga dapat dilakukan dengan mudah menggunakan perpustakaan sat
.
Tugas-tugas multimoda didistribusikan secara luas dan jenisnya banyak, dan pra-pelatihan sering kali tidak dapat mencakup semuanya. Di sini kami memberikan contoh penyesuaian sampel kecil, menggunakan 20 gambar beranotasi untuk meningkatkan kemampuan model dalam menjawab pertanyaan "latar belakang".
Buka zip fewshot-data.zip
dan jalankan perintah berikut:
bash finetune/finetune_visualglm.sh
Saat ini, tiga metode penyesuaian yang didukung:
--layer_range
dan --lora_rank
dapat disesuaikan menurut skenario spesifik dan volume data.bash finetune/finetune_visualglm_qlora.sh
. QLoRA mengkuantisasi lapisan linier ChatGLM dengan 4-bit dan hanya memerlukan memori video 9,8 GB untuk penyesuaian.--use_lora
dengan --use_ptuning
, namun tidak disarankan kecuali skenario aplikasi model sudah sangat tetap.Setelah pelatihan, Anda dapat menggunakan perintah berikut untuk inferensi:
python cli_demo.py --from_pretrained your_checkpoint_path --prompt_zh 这张图片的背景里有什么内容?
Sebelum menyempurnakan:
欢迎使用 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(回车进入纯文本对话):
Setelah penyesuaian:
欢迎使用 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(回车进入纯文本对话):
Jika Anda ingin menggabungkan parameter bagian LoRA ke dalam bobot aslinya, Anda dapat memanggil merge_lora()
, misalnya:
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 )
Penyempurnaan memerlukan instalasi perpustakaan deepspeed
. Saat ini, proses ini hanya mendukung sistem Linux. Contoh instruksi lebih lanjut dan instruksi proses untuk sistem Windows akan diselesaikan dalam waktu dekat.
python cli_demo.py
Program akan secara otomatis mengunduh model sat dan melakukan percakapan interaktif pada baris perintah. Masukkan instruksi dan tekan Enter untuk menghasilkan balasan. Enter clear untuk menghapus riwayat percakapan.
Program ini menyediakan hyperparameter berikut untuk mengontrol proses pembuatan dan akurasi kuantisasi:
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
Perlu dicatat bahwa selama pelatihan, kata-kata cepat untuk pasangan tanya jawab bahasa Inggris adalah Q: A:
:, sedangkan perintah bahasa Mandarin adalah问:答:
Perintah bahasa Mandarin digunakan dalam demo web, sehingga respons bahasa Inggris akan lebih buruk dan dicampur dengan bahasa Mandarin; jika perlu Untuk membalas dalam bahasa Inggris, silakan gunakan opsi --english
di cli_demo.py
.
Kami juga menyediakan alat baris perintah efek mesin tik yang diwarisi dari ChatGLM-6B
. Alat ini menggunakan model Huggingface:
python cli_demo_hf.py
Kami juga mendukung penerapan model multi-kartu paralel: (Anda perlu memperbarui sat versi terbaru. Jika Anda telah mengunduh pos pemeriksaan sebelumnya, Anda juga perlu menghapusnya secara manual dan mengunduhnya lagi)
torchrun --nnode 1 --nproc-per-node 2 cli_demo_mp.py
Kami menyediakan Demo versi web berdasarkan Gradio. Instal pertama Gradio: pip install gradio
. Kemudian unduh dan masuk ke gudang ini untuk menjalankan web_demo.py
:
git clone https://github.com/THUDM/VisualGLM-6B
cd VisualGLM-6B
python web_demo.py
Program ini secara otomatis akan mengunduh model sat, menjalankan Server Web, dan menampilkan alamatnya. Buka alamat keluaran di browser untuk menggunakannya.
Kami juga menyediakan alat versi web efek mesin tik yang diwarisi dari ChatGLM-6B
. Alat ini menggunakan model Huggingface dan akan berjalan pada port :8080
setelah startup:
python web_demo_hf.py
Kedua demo versi web menerima parameter baris perintah --share
untuk menghasilkan tautan publik gradio, dan menerima --quant 4
dan --quant 8
untuk menggunakan kuantisasi 4-bit/kuantisasi 8-bit masing-masing untuk mengurangi penggunaan memori video.
Pertama, Anda perlu menginstal dependensi tambahan pip install fastapi uvicorn
, lalu jalankan api.py di gudang:
python api.py
Program ini secara otomatis akan mengunduh model sat, yang diterapkan pada port lokal 8080 secara default dan dipanggil melalui metode POST. Berikut ini adalah contoh penggunaan curl
untuk meminta. Secara umum, Anda juga dapat menggunakan metode kode untuk melakukan 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
Nilai kembalian yang diperoleh adalah
{
"response":"这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。",
"history":[('描述这张图片', '这张图片展现了一只可爱的卡通羊驼,它站在一个透明的背景上。这只羊驼长着一张毛茸茸的耳朵和一双大大的眼睛,它的身体是白色的,带有棕色斑点。')],
"status":200,
"time":"2023-05-16 20:20:10"
}
Kami juga menyediakan api_hf.py yang menggunakan model Huggingface. Penggunaannya konsisten dengan API model sat:
python api_hf.py
Dalam implementasi Huggingface, model dimuat dengan presisi FP16 secara default, dan menjalankan kode di atas memerlukan memori video sekitar 15 GB. Jika GPU Anda memiliki memori terbatas, Anda dapat mencoba memuat model dalam mode terkuantisasi. Cara menggunakannya:
# 按需修改,目前只支持 4/8 bit 量化。下面将只量化ChatGLM,ViT 量化时误差较大
model = AutoModel . from_pretrained ( "THUDM/visualglm-6b" , trust_remote_code = True ). quantize ( 8 ). half (). cuda ()
Dalam implementasi sat, Anda harus terlebih dahulu meneruskan parameter untuk mengubah lokasi pemuatan ke cpu
, lalu melakukan kuantifikasi. Caranya sebagai berikut, lihat cli_demo.py
untuk detailnya:
from sat . quantization . kernels import quantize
quantize ( model , args . quant ). cuda ()
# 只需要 7GB 显存即可推理
Proyek ini dalam versi V1. Parameter dan volume perhitungan model visual dan bahasa relatif kecil. Kami telah merangkum arah peningkatan utama sebagai berikut:
Kode repositori ini bersifat open source sesuai dengan perjanjian Apache-2.0. Penggunaan bobot model VisualGLM-6B harus mematuhi Lisensi Model.
Jika Anda merasa pekerjaan kami bermanfaat, mohon pertimbangkan untuk mengutip makalah berikut
@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}
}
Kumpulan data dalam fase penyempurnaan instruksi VisualGLM-6B mencakup bagian dari data grafis dan teks berbahasa Inggris dari proyek MiniGPT-4 dan LLAVA, serta banyak kumpulan data kerja lintas-modal klasik kontribusi.