ChatGLM的部署,主要是兩個步驟:
- 在Github上下載chatglm的庫文件
- 在Hugging Face上下載模型參數與配置文件
ChatGLM包
從Github上看ChatGLM項目文件的結構來看,僅僅是包含三種部署方式的py代碼與微調的py代碼
而相關的實現細節,比如神經網絡、激活函數、損失函數等具體的實現,並不在該項目源碼中。
不管以哪種方式部署,最核心就是三句代碼,其作用是引入模型參數,初始化transformers配置;以web部署的方式爲例:
tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()
model = model.eval()
// 引入Gradio,實現web方式的使用
// 調用模型方法,開始進行對話推理
xx = model.stream_chat(xxxx);
web的調用是基於Gradio;
api的調用是基於fastapi;
cli的調用是基於python解釋器;
Hugging Face
Hugging Face平臺的模型庫如下:
除去與訓練後的模型參數(xxx.bin)外,其餘的文件是huggingface的文件結構。
微調
微調的解決方案一般是P-Tuning或LoRA;ChatGLM-6B是基於P-Tuning v2實現的微調,P-Tuning v2是基於連續提示(continuous prompts)的思想。微調會生成新的模型參數文件,也稱爲checkpoint文件。
微調時可以選擇全參數微調或是部分參數微調,其流程是訓練+推理。訓練生成新的checkpoint文件(模型參數);推理則是加載模型參數文件。
訓練前,需要調整參數,一般修改train.sh腳本文件就行。
推理時,加載原模型文件與微調後生成的checkpoint文件。還是通過那三句代碼。
輸出的checkpoint文件如下:
checkpoint文件夾內的文件如下:
transformers的聯繫
目前的模型,都會對接到Hugging Face平臺的transformers庫中,通過transformers庫來管控大模型。所以在推理階段通過三句代碼就能調用AI模型。在微調階段,生成的checkpoint文件中,其結構是Hugging Face平臺的文件結構,包含transformers的相關配置及初始化信息。