女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

LLaMa量化部署

jf_pmFSk4VX ? 來源:GiantPandaCV ? 2023-08-28 16:44 ? 次閱讀


本文導論部署 LLaMa 系列模型常用的幾種方案,并作速度測試。包括 Huggingface 自帶的 LLM.int8(),AutoGPTQ, GPTQ-for-LLaMa, exllama, llama.cpp。

總結來看,對 7B 級別的 LLaMa 系列模型,經過 GPTQ 量化后,在 4090 上可以達到 140+ tokens/s 的推理速度。在 3070 上可以達到 40 tokens/s 的推理速度。

LM.int8()

來自論文:LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

LM.int8() 時 Hugingface 集成的量化策略。能夠通過在.from_pretrain()時候傳遞load_in_8bit來實現,針對幾乎所有的 HF Transformers 模型都有效。大致方法是,在矩陣點積計算過程中, 將其中的 outliers 參數找出來(以行或列為單位),然后用類似 absolute maximum (absmax) quantization 的方法,根據行/列對 Regular 參數做量化處理,outlier 參數仍然做 fp16 計算,最后相加。

98b17b6c-4557-11ee-a2ef-92fbcf53809c.png

根據huggingface 的博客, LLM.INT8() 能夠再模型性能不影響很多的前提下,讓我們能用更少的資源進行 LLM 推理。但 LLM.int8() 普遍的推理速度會比 fp16 慢。博客中指出,對于越小的模型, int8() 會導致更慢的速度。

結合論文中的實驗結果,模型越大,int8() 加速越明顯,個人猜測是由于非 outlier 數量變多了,更多的參數進行了 int8 計算,抵消了額外的量化轉化時間開銷?

98cb079e-4557-11ee-a2ef-92fbcf53809c.png

GPTQ

GPTQ: ACCURATE POST-TRAINING QUANTIZATION FOR GENERATIVE PRE-TRAINED TRANSFORMERS

使用 GPTQ 量化的模型具有很大的速度優勢,與 LLM.int8() 不同,GPTQ 要求對模型進行 post-training quantization,來得到量化權重。GPTQ 主要參考了 Optimal Brain Quanization (OBQ),對OBQ 方法進行了提速改進。有網友在文章中對 GPTQ, OBQ, OBS 等量化策略進行了整理,這里就不多贅述了。

以下對幾個 GPTQ 倉庫進行介紹。以下所有測試均在 4090 上進行,模型推理速度采用oobabooga/text-generation-webui提供的 UI。

GPTQ-for-LLaMa

專門針對 LLaMa 提供 GPTQ 量化方案的倉庫,如果考慮 GPU 部署 LLaMa 模型的話,GPTQ-for-LLaMa 是十分指的參考的一個工具。像http://huggingface.co上的Thebloke很大部分模型都是采用 GPTQ-for-LLaMa 進行量化的。

Post Training Quantization:GPTQ-for-LLaMa 默認采用C4數據集進行量化訓練(只采用了 C4 中英文數據的一部分進行量化,而非全部 9TB+的數據):

CUDA_VISIBLE_DEVICES=0 python llama.py /models/vicuna-7b c4 
    --wbits 4 
--true-sequential
--groupsize128
--save_safetensorsvicuna7b-gptq-4bit-128g.safetensors

由于 GPTQ 是 Layer-Wise Quantization,因此進行量化時對內存和顯存要求會少一點。在 4090 測試,最高峰顯存占用 7000MiB,整個 GPTQ 量化過程需要 10 分鐘。量化后進行 PPL 測試,7b 在沒有 arc_order 量化下,c4 的 ppl 大概會在 5-6 左右:

CUDA_VISIBLE_DEVICES=0 python llama.py /models/vicuna-7b c4 
    --wbits 4     
    --groupsize 128     
    --load vicuna7b-gptq-4bit-128g.safetensors     
    --benchmark 2048 --check

對量化模型在 MMLU 任務上測試,量化后 MMLU 為,于 fp16(46.1)稍微有點差距。

Huggingface 上的TheBloke發布的大部分 LLaMa GPTQ 模型,都是通過以上方式(C4 數據集 + wbit 4 + group 128 + no arc_order + true-sequential)量化的。若由于 GPTQ-for-LLaMa 及 transformers 倉庫不斷更新,Huggingface.co 上發布的模型可能存在無法加載或精度誤差等問題,可以考慮重新量化,并通過優化量化數據集、添加 arc_order 等操作來提高量化精度。

GPTQ-for-LLaMa 的一些坑:

  • 經過測試,問題存在于llama.py中的quant.make_quant_attn(model)。使用quant_attn能夠極大提升模型推理速度。參考這個歷史 ISSUE,估計是position_id的推理 cache 在 Attention layer 中的配置存在了問題。left-padding issue

  • 模型加載問題:使用 gptq-for-llama 時,因 transformer 版本不同,可能出現模型加載不上問題。如加載TheBloke/Wizard-Vicuna-30B-Uncensored-GPTQ時,用最新版的 GPTQ-for-LLaMa 就會出現權重于模型 registry 名稱不匹配的情況。

  • left-padding 問題:目前 GPTQ-for-LLaMa 的所有分支(triton, old-cuda 或 fastest-inference-int4)都存在該問題。如果模型對存在 left-padding 的輸入進行預測時候,輸出結果是混亂的。這導致了 GPTQ-for-LLaMa 目前無法支持正確的 batch inference。

  • GPTQ-for-LLaMa 版本變動大,如果其他倉庫有使用 GPTQ-for-LLaMa 依賴的話,需要認真檢查以下版本。如obbaboogafork 了一個單獨的GPTQ-for-LLaMa為oobabooga/text-generation-webui做支持。最新版的 GPTQ-for-LLaMa 在 text-generation-webui 中使用會有 BUG。

AutoGPTQ

AutoGPTQ 使用起來相對容易,它提供了對大多數 Huggingface LLM 模型的量化方案,如 LLaMa 架構系列模型,bloom,moss,falcon,gpt_bigcode 等。(沒在支持表中看到 ChatGLM 系列模型)。具體可以參考 官方的快速上手和進階使用來進行量化模型訓練和部署。

AutoGPTQ 可以直接加載 GPTQ-for-LLaMa 的量化模型:

from auto_gptq import AutoGPTQForCausalLMmodel = AutoGPTQForCausalLM.from_quantized(
  model_dir,   # 存放模型的文件路徑,里面包含 config.json, tokenizer.json 等模型配置文件
  model_basename="vicuna7b-gptq-4bit-128g.safetensors",
  use_safetensors=True,
  device="cuda:0",
  use_triton=True,  # Batch inference 時候開啟 triton 更快
  max_memory = {0: "20GIB", "cpu": "20GIB"}  # )

AutoGPTQ 提供了更多的量化加載選項,如是否采用fused_attention,配置CPU offload等。用 AutoGPTQ 加載權重會省去很多不必要的麻煩,如 AutoGPTQ 并沒有 GPTQ-for-LLaMa 類似的 left-padding bug,對 Huggingface 其他 LLM 模型的兼容性更好。因此如果做 GPTQ-INT4 batch inference 的話,AutoGPTQ 會是首選。

但對于 LLaMa 系列模型,AutoGPTQ 的速度會明顯慢于 GPTQ-for-LLaMa。在 4090 上測試,GPTQ-for-LLaMa 的推理速度會塊差不多 30%。

exllama

exllama為了讓 LLaMa 的 GPTQ 系列模型在 4090/3090 Ti 顯卡上跑更快,推理平均能達到 140+ tokens/s。當然為了實現那么高的性能加速,exllama 中的模型移除了 HF transformers 模型的大部分依賴,這也導致如果在項目中使用 exllama 模型需要額外的適配工作。text-generation-webui 中對 exllama 進行了 HF 適配,使得我們能夠像使用 HF 模型一樣使用 exllama,代價是犧牲了一些性能,參考exllama_hf。

gptq

GPTQ 的官方倉庫。以上大部分倉庫都是基于官方倉庫開發的,感謝 GPTQ 的開源,讓單卡 24G 顯存也能跑上 33B 的大模型。

GGML

GGML是一個機械學習架構,使用 C 編寫,支持 Integer quantization(4-bit, 5-bit, 8-bit) 以及 16-bit float。同時也對部分硬件架構進行了加速優化。本章中討論到的 LLaMa 量化加速方案來源于LLaMa.cpp。LLaMa.cpp 有很多周邊產品,如llama-cpp-python等,在下文中,我們以 GGML 稱呼這類模型量化方案。

llama.cpp 在一個月前支持了全面 GPU 加速(在推理的時候,可以把整個模型放在 GPU 上推理)。參考后文的測試,LLaMa.cpp 比 AutoGPTQ 有更快的推理速度,但是還是比 exllama 慢很多。

GGML 有不同的量化策略(具體量化類型參考),以下使用 Q4_0 對 LLaMa-2-13B-chat-hf 進行量化和測試。

此處采用docker with cuda部署,為方便自定義,先注釋掉.devops/full-cuda.Dockerfile中的EntryPoint。而后構建鏡像:

docker build -t local/llama.cpp:full-cuda -f .devops/full-cuda.Dockerfile .

構建成功后開啟容器(models 映射到模型文件路徑):

docker run -it --name ggml --gpus all -p 8080:8080 -v /home/kevin/models:/models local/llama.cpp:full-cuda bash

參考官方文檔,進行權重轉換即量化:

# 轉換 ggml 權重python3 convert.py /models/Llama-2-13b-chat-hf/# 量化./quantize /models/Llama-2-13b-chat-hf/ggml-model-f16.bin /models/Llama-2-13b-chat-GGML_q4_0/ggml-model-q4_0.bin q4_0

完成后開啟server 測試

./server -m /models/Llama-2-13b-chat-GGML_q4_0/ggml-model-q4_0.bin --host 0.0.0.0 --ctx-size 2048 --n-gpu-layers 128

發送請求測試:

curl --request POST   --url http://localhost:8080/completion   --header "Content-Type: application/json"   --data '{"prompt": "Once a upon time,","n_predict": 200}'

使用 llama.cpp server 時,具體參數解釋參考官方文檔。主要參數有:

  • --ctx-size: 上下文長度。

  • --n-gpu-layers:在 GPU 上放多少模型 layer,我們選擇將整個模型放在 GPU 上。

  • --batch-size:處理 prompt 時候的 batch size。

使用 llama.cpp 部署的請求,速度與 llama-cpp-python 差不多。對于上述例子中,發送Once a upon time,并返回 200 個字符,兩者完成時間都在 2400 ms 左右(約 80 tokens/秒)。

推理部署

記得在bert 時代,部署 Pytorch 模型時可能會考慮一些方面,比如動態圖轉靜態圖,將模型導出到 onnx,torch jit 等,混合精度推理,量化,剪枝,蒸餾等。對于這些推理加速方案,我們可能需要自己手動應用到訓練好的模型上。但在 LLaMa 時代,感受到最大的變化就是,一些開源的框架似乎為你做好了一切,只需要把你訓練好的模型權重放上去就能實現比 HF 模型快 n 倍的推理速度。

以下對比這些推理加速方案:HF 官方 float16(基線), vllm,llm.int8(),GPTQ-for-LLaMa,AUTOGPTQ,exllama, llama.cpp。

Model_name tool tokens/s
vicuna 7b float16 43.27
vicuna 7b load-in-8bit (HF) 19.21
vicuna 7b load-in-4bit (HF) 28.25
vicuna7b-gptq-4bit-128g AUTOGPTQ 79.8
vicuna7b-gptq-4bit-128g GPTQ-for-LLaMa 80.0
vicuna7b-gptq-4bit-128g exllama 143.0
Llama-2-7B-Chat-GGML (q4_0) llama.cpp 111.25
Llama-2-13B-Chat-GGML (q4_0) llama.cpp 72.69
Wizard-Vicuna-13B-GPTQ exllama 90
Wizard-Vicuna-30B-uncensored-GPTQ exllama 43.1
Wizard-Vicuna-30B-uncensored-GGML (q4_0) llama.cpp 34.03
Wizard-Vicuna-30B-uncensored-GPTQ AUTOGPTQ 31

以上所有測試均在 4090 + Inter i9-13900K上進行,模型推理速度采用oobabooga/text-generation-webui提供的 UI(text-generation-webui 的推理速度會比實際 API 部署慢一點)。這邊只做速度測試,關于精度測試,可以查看GPT-for-LLaMa result和exllama results。

一些備注

  1. 模型推理的速度受 GPU 即 CPU 的影響最大。有網友指出link,同樣對于 4090,在 CPU 不同的情況下,7B LLaMa fp16 快的時候有 50 tokens/s,慢的時候能達到 23 tokens/s。

  2. 對于 stable diffusion,torch cuda118 能比 torch cuda 117 速度快上1倍。但對于 LLaMa 來說,cuda 117 和 118 差別不大。

  3. 量化 batch inference 首選 AUTOGPTQ (TRITON),盡管 AutoGPTQ 速度慢點,但目前版本的 GPTQ-for-LLaMa 存在 left-padding 問題,無法使用 batch inference;batch size = 1 時,首選 exllama 或者 GPTQ-for-LLaMa。

  4. vllm 部署 fp16 的模型速度也不錯(80+ tokens/s),同時也做了內存優化;如果設備資源夠的話,可以考慮下 vllm,畢竟采用 GPTQ 還是有一點精度偏差的。

  5. TheBloke 早期發布的一些模型可能無法加載到 exllama 當中,可以使用最新版本的 GPTQ-for-LLaMa 訓練一個新模型。

  6. 當顯卡容量無法加載整個模型時(比如在單卡 4090 上加載 llama-2-70B-chat),llama.cpp 比 GPTQ 速度更快(參考)。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11038

    瀏覽量

    216038
  • 模型
    +關注

    關注

    1

    文章

    3488

    瀏覽量

    50010
  • LLM
    LLM
    +關注

    關注

    1

    文章

    320

    瀏覽量

    686

原文標題:LLaMa 量化部署

文章出處:【微信號:GiantPandaCV,微信公眾號:GiantPandaCV】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    解讀大模型FP量化的解決方案

    LLaMA, BERT 以及 ViTs 模型上,4-bit 量化皆取得了遠超 SOTA 的結果。特別是,這篇文章展示了 4-bit 量化LLaMA-13B 模型,在零樣本推理任
    發表于 11-24 11:15 ?1171次閱讀
    解讀大模型FP<b class='flag-5'>量化</b>的解決方案

    [技術] 【飛凌嵌入式OK3576-C開發板體驗】llama2.c部署

    MCU 上部署。以下是 llama2.c 在 OK3576 開發板上的部署步驟。 工程克隆 首先我們將源碼克隆下來:https://github.com/karpathy/llama
    發表于 09-18 23:58

    實戰MNN之量化部署

    今天MNN更新了新的工具包---CNN網絡量化工具(quantization),作者也第一時間進行了測試。提升的效果還是很可觀的,量化前的CNN網絡大小...
    發表于 02-07 11:45 ?0次下載
    實戰MNN之<b class='flag-5'>量化</b><b class='flag-5'>部署</b>

    基于LLAMA的魔改部署

    訓練),并且和Vision結合的大模型也逐漸多了起來。所以怎么部署大模型是一個 超級重要的工程問題 ,很多公司也在緊鑼密鼓的搞著。 目前效果最好討論最多的開源實現就是LLAMA,所以我這里討論的也是基于 LLAMA的魔改
    的頭像 發表于 05-23 15:08 ?5855次閱讀
    基于<b class='flag-5'>LLAMA</b>的魔改<b class='flag-5'>部署</b>

    Yolo系列模型的部署、精度對齊與int8量化加速

    在基于PytorchQuantization導出的含有QDQ節點的onnx時,我們發現盡管量化版本的torch模型精度很高,但是在TensorRT部署時精度卻很低,TRT部署收精度損失很嚴重,通過
    的頭像 發表于 11-23 16:40 ?1600次閱讀

    LLaMA 2是什么?LLaMA 2背后的研究工作

    Meta 發布的 LLaMA 2,是新的 sota 開源大型語言模型 (LLM)。LLaMA 2 代表著 LLaMA 的下一代版本,并且具有商業許可證。
    的頭像 發表于 02-21 16:00 ?1520次閱讀

    Llama 3 王者歸來,Airbox 率先支持部署

    前天,智算領域迎來一則令人振奮的消息:Meta正式發布了備受期待的開源大模型——Llama3。Llama3的卓越性能Meta表示,Llama3在多個關鍵基準測試中展現出卓越性能,超越了業內先進的同類
    的頭像 發表于 04-22 08:33 ?918次閱讀
    <b class='flag-5'>Llama</b> 3 王者歸來,Airbox 率先支持<b class='flag-5'>部署</b>

    Optimum Intel三步完成Llama3在算力魔方的本地量化部署

    Llama3 是Meta最新發布的開源大語言模型(LLM), 當前已開源8B和70B參數量的預訓練模型權重,并支持指令微調。
    的頭像 發表于 05-10 10:34 ?1457次閱讀
    Optimum Intel三步完成<b class='flag-5'>Llama</b>3在算力魔方的本地<b class='flag-5'>量化</b>和<b class='flag-5'>部署</b>

    【AIBOX上手指南】快速部署Llama3

    Firefly開源團隊推出了Llama3部署包,提供簡易且完善的部署教程,過程無需聯網,簡單快捷完成本地化部署。點擊觀看Llama3快速
    的頭像 發表于 06-06 08:02 ?1131次閱讀
    【AIBOX上手指南】快速<b class='flag-5'>部署</b><b class='flag-5'>Llama</b>3

    如何將Llama3.1模型部署在英特爾酷睿Ultra處理器

    本文從搭建環境開始,一步一步幫助讀者實現只用五行代碼便可將Llama3.1模型部署在英特爾 酷睿 Ultra 處理器上。
    的頭像 發表于 07-26 09:51 ?2976次閱讀
    如何將<b class='flag-5'>Llama</b>3.1模型<b class='flag-5'>部署</b>在英特爾酷睿Ultra處理器

    源2.0-M32大模型發布量化版 運行顯存僅需23GB 性能可媲美LLaMA3

    北京2024年8月23日?/美通社/ -- 近日,浪潮信息發布源2.0-M32大模型4bit和8bit量化版,性能比肩700億參數的LLaMA3開源大模型。4bit量化版推理運行顯存僅需
    的頭像 發表于 08-25 22:06 ?602次閱讀
    源2.0-M32大模型發布<b class='flag-5'>量化</b>版 運行顯存僅需23GB 性能可媲美<b class='flag-5'>LLaMA</b>3

    使用OpenVINO 2024.4在算力魔方上部署Llama-3.2-1B-Instruct模型

    前面我們分享了《三步完成Llama3在算力魔方的本地量化部署》。2024年9月25日,Meta又發布了Llama3.2:一個多語言大型語言模型(LLMs)的集合。
    的頭像 發表于 10-12 09:39 ?1327次閱讀
    使用OpenVINO 2024.4在算力魔方上<b class='flag-5'>部署</b><b class='flag-5'>Llama</b>-3.2-1B-Instruct模型

    Meta發布Llama 3.2量化版模型

    近日,Meta在開源Llama 3.2的1B與3B模型后,再次為人工智能領域帶來了新進展。10月24日,Meta正式推出了這兩個模型的量化版本,旨在進一步優化模型性能,拓寬其應用場景。
    的頭像 發表于 10-29 11:05 ?773次閱讀

    用Ollama輕松搞定Llama 3.2 Vision模型本地部署

    Ollama 是一個開源的大語言模型服務工具,它的核心目的是簡化大語言模型(LLMs)的本地部署和運行過程,請參考《Gemma 2+Ollama在算力魔方上幫你在LeetCode解題》,一條命令完成
    的頭像 發表于 11-23 17:22 ?3549次閱讀
    用Ollama輕松搞定<b class='flag-5'>Llama</b> 3.2 Vision模型本地<b class='flag-5'>部署</b>

    使用NVIDIA TensorRT提升Llama 3.2性能

    Llama 3.2 模型集擴展了 Meta Llama 開源模型集的模型陣容,包含視覺語言模型(VLM)、小語言模型(SLM)和支持視覺的更新版 Llama Guard 模型。與 NVIDIA 加速
    的頭像 發表于 11-20 09:59 ?689次閱讀