python cli_demo.py
使用以下命令安装所需依赖:
pip install -i https://pypi.org/simple -r requirements.txt
对于国内用户,推荐使用阿里云镜像:
pip install -i https://mirrors.aliyun.com/pypi/simple/ -r requirements.txt
如果你不需要 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
以下是使用 Transformers 库进行模型推理的示例代码:
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)
如果你在 Hugging Face Hub 上下载模型参数速度较慢,可以手动下载模型参数文件并从本地加载:
huggingface-cli download --resume-download THUDM/visualglm-6b --local-dir ./dataset --token YOUR_HUGGINGFACE_TOKEN
解压 fewshot-data.zip
后,运行以下命令进行微调:
bash finetune/finetune_visualglm.sh
支持三种微调方式:
--layer_range
和 --lora_rank
参数。bash finetune/finetune_visualglm_qlora.sh
进行微调。--use_ptuning
参数,但不推荐使用,除非场景非常固定。微调后可以合并 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)
使用以下命令启动命令行 Demo:
python cli_demo.py
程序支持以下参数控制生成过程与量化精度:
usage: cli_demo.py [-h] [--max_length MAX_LENGTH] [--top_p TOP_P] [--top_k TOP_K] [--temperature TEMPERATURE] [--english] [--quant {8,4}]
--max_length
: 最大序列长度--top_p
: nucleus 采样的 top p--top_k
: top k 采样的 top k--temperature
: 采样温度--english
: 仅输出英文--quant {8,4}
: 量化位数在程序中可以通过输入 clear
清空对话历史,输入 stop
终止程序。