Llama 2是Meta發佈的最新大型語言模型,是以Transformer為基礎的人工神經網路,以一系列單詞作為輸入,遞迴地預測下一個單詞來生成文本。這是一款開源且免費的人工智慧模型。在此之前,由於開源協議問題,Llama 1雖然功能強大,但不可免費商用,而這一次Meta終於推出了免費商用版本Llama 2,藉著這個機會,我們來分享一下如何用Llama 2和OpenVINO工具套件來打造一款聊天機器人。
這個應用範例的GitHub資源庫網址如下:https://github.com/OpenVINO-dev-contest/llama2.openvino
備註1:由於Llama 2在模型轉換和運作過程中對記憶體的佔用較高,推薦使用支援64GB以上記憶體的的伺服器終端作為測試平台。
備註2:本文僅分享部署Llama 2原始預訓練模型的方法,如需獲得自訂知識的能力,需要對原始模型進行Fine-tune;如需獲得更好的推論性能,可以使用量化後的模型版本。
匯出模型
第一步,我們需要下載Llama 2模型,並將其匯出為OpenVINO所支援的IR格式模型進行部署,這裡我們使用Optimum-Intel所提供的介面,直接從Hugging Face資源庫中下載並生成IR模型。
ov_model = OVModelForCausalLM.from_pretrained(args.model_id,
compile=False,
from_transformers=True)
ov_model.save_pretrained(model_path)
不過在這之前,我們首先需要向Meta申請模型下載的許可,方可開始下載,具體如何發送申請可以參考Hugging Face網站Llama 2資源庫中的說明和引導:meta-llama/Llama-2-7b-hf
執行專案資源庫中的export_ir.py腳本後,會在本地指定路徑中生成openvino_model.bin和openvino_model.xml,前者為模型參數檔,後者為模型結構檔。
由於目前Hugging Face的Transformer以及Optimum資源庫都已經支援Llama 2系列模型的部署,一種比較簡便和快捷的做法是,直接使用Optimum-Intel來運作整個Llama 2 pipeline,由於Optimum中已經預置了完整的問答類模型pipeline: ModelForCausalLM,並進行了深度的整合,所以我們只需要調用少量介面,並且可以輕鬆調用OpenVINO推論後端,實現一個簡單問答任務的部署。
ov_model = OVModelForCausalLM.from_pretrained(model_path,
compile=False,
device=args.device)
ov_model.compile()
generate_ids = ov_model.generate(inputs.input_ids,
max_length=args.max_sequence_length)
output_text = tokenizer.batch_decode(generate_ids,
skip_special_tokens=True,
clean_up_tokenization_spaces=False)
這裡再簡單介紹下什麼是Optimum。Optimum資源庫是Hugging Face為了方便開發者在不同硬體平台部署來自Transformer和Diffuser資源庫的模型,而打造的部署工具,其中的Optimum-Intel資源庫則支援在Intel平台部署模型時,調用OpenVIN工具套件作為模型的推論後端,提升任務性能。
最終效果如下:
“Response: what is openvino ?
OpenVINO is an open-source software framework for deep learning inference that is designed to run on a variety of platforms, including CPUs, GPUs, and FPGAs. It is developed by the OpenVINO Project, which is a collaboration between Intel and the Linux Foundation.
OpenVINO provides a set of tools and libraries for developers to build, optimize, and deploy deep learning models for inference. It supports popular deep learning frameworks such as TensorFlow, PyTorch, and Caffe, and provides a number of features to improve the performance“
模型部署(方案二)
由於Optimum仍屬於「黑箱」模式,開發者無法充分自訂內在的運作邏輯,所以這裡使用的第二種方式,則是在脫離Optimum資源庫的情況下,僅用OpenVINO的原生介面部署Llama 2模型,並重構pipeline。
整個重構後的pipeline如下圖所示,Prompt提示會送入Tokenizer進行分詞和詞向量編碼,然後有OpenVINO推論獲得結果(藍色部分),來到後處理部分,我們會把推論結果進行進一步的採樣和解碼,最後生成常規的文本資訊。這裡為了簡化流程,僅使用了Top-K作為篩選方法。
Llama 2問答任務流程
整個pipeline的大部分程式碼都可以套用文本生成任務的常規流程,其中比較複雜一些的是OpenVIN推論部分的工作,由於Llama 2文本生成任務需要完成多次遞迴反覆運算,並且每次反覆運算會存在cache快取,因此我們需要為不同的反覆運算輪次分別準備合適的輸入資料。接下來我們詳細解構一下模型的運作邏輯。
只需不到短短一分鐘...
輸入您的信箱與ID註冊即可享有一切福利!
會員福利
免費電子報
會員搶先看
主題訂閱
好文收藏