国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

使用GGML和LangChain在CPU上運(yùn)行量化的llama2

這篇具有很好參考價(jià)值的文章主要介紹了使用GGML和LangChain在CPU上運(yùn)行量化的llama2。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Meta AI 在本周二發(fā)布了最新一代開源大模型 Llama 2。對比于今年 2 月發(fā)布的 Llama 1,訓(xùn)練所用的 token 翻了一倍,已經(jīng)達(dá)到了 2 萬億,對于使用大模型最重要的上下文長度限制,Llama 2 也翻了一倍。

在本文,我們將緊跟趨勢介紹如何在本地CPU推理上運(yùn)行量化版本的開源Llama 2。

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

量化快速入門

我們首先簡單介紹一下量化的概念:

量化是一種減少用于表示數(shù)字或值的比特?cái)?shù)的技術(shù)。由于量化減少了模型大小,因此它有利于在cpu或嵌入式系統(tǒng)等資源受限的設(shè)備上部署模型。

一種常用的方法是將模型權(quán)重從原始的16位浮點(diǎn)值量化為精度較低的8位整數(shù)值。

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

llm已經(jīng)展示了出色的能力,但是它需要大量的CPU和內(nèi)存,所以我們可以使用量化來壓縮這些模型,以減少內(nèi)存占用并加速計(jì)算推理,并且保持模型性能。我們將通過將權(quán)重存儲在低精度數(shù)據(jù)類型中來降低模型參數(shù)的精度。

工具和數(shù)據(jù)

下圖是我們將在這個(gè)項(xiàng)目中構(gòu)建的文檔知識問答應(yīng)用程序的體系結(jié)構(gòu)。

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

我們的測試文件是177頁的曼聯(lián)足球俱樂部2022年年報(bào)。

為了演示這個(gè)項(xiàng)目的量化結(jié)果,我們使用一個(gè)AMD Ryzen 5 5600X 6核處理器和16GB RAM (DDR4 3600)。

下面是構(gòu)建這個(gè)應(yīng)用程序時(shí)將使用的軟件工具:

1、LangChain

LangChain是一個(gè)提供了一組廣泛的集成和數(shù)據(jù)連接器,允許我們鏈接和編排不同的模塊。可以常見聊天機(jī)器人、數(shù)據(jù)分析和文檔問答等應(yīng)用。

2、C Transformers

C transformer是一個(gè)Python庫,它為使用GGML庫并在C/ c++中實(shí)現(xiàn)了Transformers模型。

為了解釋這個(gè)事情我們首先要了解GGML:

GGML庫是一個(gè)為機(jī)器學(xué)習(xí)設(shè)計(jì)的張量庫,它的目標(biāo)是使大型模型能夠在高性能的消費(fèi)級硬件上運(yùn)行。這是通過整數(shù)量化支持和內(nèi)置優(yōu)化算法實(shí)現(xiàn)的。

也就是說,llm的GGML版本(二進(jìn)制格式的量化模型)可以在cpu上高性能地運(yùn)行。因?yàn)槲覀冏罱K是使用Python的,所以還需要C Transformers庫,它其實(shí)就是為GGML模型提供了Python API。

C transformer支持一組選定的開源模型,包括像Llama、GPT4All-J、MPT和Falcon等的流行模型。

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

3、sentence-transformer

sentence-transformer提供了簡單的方法來計(jì)算句子、文本和圖像的嵌入。它能夠計(jì)算100多種語言的嵌入。我們將在這個(gè)項(xiàng)目中使用開源的all-MiniLM-L6-v2模型。

4、FAISS

Facebook AI相似度搜索(FAISS)是一個(gè)為高效相似度搜索和密集向量聚類而設(shè)計(jì)的庫。

給定一組嵌入,我們可以使用FAISS對它們進(jìn)行索引,然后利用其強(qiáng)大的語義搜索算法在索引中搜索最相似的向量。

雖然它不是傳統(tǒng)意義上的成熟的向量存儲(如數(shù)據(jù)庫管理系統(tǒng)),但它以一種優(yōu)化的方式處理向量的存儲,以實(shí)現(xiàn)有效的最近鄰搜索。

5、Poetry

Poetry用于設(shè)置虛擬環(huán)境和處理Python包管理。相比于venv,Poetry使依賴管理更加高效和無縫。這個(gè)不是只做參考,因?yàn)閏onda也可以。

開源LLM

開源LLM領(lǐng)域已經(jīng)取得了巨大的進(jìn)步,在HuggingFace的開放LLM排行榜上可以找到模型。為了緊跟時(shí)代,我們選擇了最新的開源Llama-2-70B-Chat模型(GGML 8位):

1、Llama 2

它是C Transformers庫支持的開源模型。根據(jù)LLM排行榜排名(截至2023年7月),在多個(gè)指標(biāo)中表現(xiàn)最佳。在原來的Llama 模型設(shè)定的基準(zhǔn)上有了巨大的改進(jìn)。

2、模型尺寸:7B

LLM將主要用于總結(jié)文檔塊這一相對簡單的任務(wù)。因此選擇了7B模型,因?yàn)槲覀冊诩夹g(shù)上不需要過大的模型(例如65B及以上)來完成這項(xiàng)任務(wù)。

3、微調(diào)版:Llama-2-7B-Chat

lama-2- 7b基本模型是為文本補(bǔ)全而構(gòu)建的,因此它缺乏在文檔問答用例中實(shí)現(xiàn)最佳性能所需的微調(diào)。而lama-2 - 7b - chat模型是我們的理想候選,因?yàn)樗菫閷υ捄蛦柎鸲O(shè)計(jì)的。該模型被許可(部分)用于商業(yè)用途。這是因?yàn)榻?jīng)過微調(diào)的模型lama-2- chat模型利用了公開可用的指令數(shù)據(jù)集和超過100萬個(gè)人工注釋。

4、8位量化

考慮到RAM被限制為16GB, 8位GGML版本是合適的,因?yàn)樗恍枰?.6GB的內(nèi)存而原始的非量化16位模型需要約15gb的內(nèi)存

8位格式也提供了與16位相當(dāng)?shù)捻憫?yīng)質(zhì)量,而其他更小的量化格式(即4位和5位)是可用的,但它們是以準(zhǔn)確性和響應(yīng)質(zhì)量為代價(jià)的。

構(gòu)建步驟指導(dǎo)

我們已經(jīng)了解了各種組件,接下來讓逐步介紹如何構(gòu)建文檔問答應(yīng)用程序。

由于已經(jīng)有許多教程了,所以我們不會深入到復(fù)雜和一般的文檔問答組件的細(xì)節(jié)(例如,文本分塊,矢量存儲設(shè)置)。在本文中,我們將把重點(diǎn)放在開源LLM和CPU推理方面。

1、數(shù)據(jù)處理和矢量存儲

這一步的任務(wù)是:將文本分割成塊,加載嵌入模型,然后通過FAISS 進(jìn)行向量的存儲

 from langchain.vectorstores import FAISS
 from langchain.text_splitter import RecursiveCharacterTextSplitter
 from langchain.document_loaders import PyPDFLoader, DirectoryLoader
 from langchain.embeddings import HuggingFaceEmbeddings
 
 # Load PDF file from data path
 loader = DirectoryLoader('data/',
                          glob="*.pdf",
                          loader_cls=PyPDFLoader)
 documents = loader.load()
 
 # Split text from PDF into chunks
 text_splitter = RecursiveCharacterTextSplitter(chunk_size=500,
                                                chunk_overlap=50)
 texts = text_splitter.split_documents(documents)
 
 # Load embeddings model
 embeddings = HuggingFaceEmbeddings(model_name='sentence-transformers/all-MiniLM-L6-v2',
                                    model_kwargs={'device': 'cpu'})
 
 # Build and persist FAISS vector store
 vectorstore = FAISS.from_documents(texts, embeddings)
 vectorstore.save_local('vectorstore/db_faiss')

運(yùn)行上面的Python腳本后,向量存儲將被生成并保存在名為’vectorstore/db_faiss’的本地目錄中,并為語義搜索和檢索做好準(zhǔn)備。

2、設(shè)置提示模板

我們使用lama-2 - 7b - chat模型,所以需要使用的提示模板。

一些chat的模板在這里不起作用,因?yàn)槲覀兊腖lama 2模型沒有針對這種會話界面進(jìn)行專門優(yōu)化。所以我們需要使用更加直接的模板,例如:

 qa_template = """Use the following pieces of information to answer the user's question.
 If you don't know the answer, just say that you don't know, don't try to make up an answer.
 Context: {context}
 Question: {question}
 Only return the helpful answer below and nothing else.
 Helpful answer:
 """

需要注意的是,相對較小的LLM(如7B),對格式特別敏感。當(dāng)改變提示模板的空白和縮進(jìn)時(shí),可能得到了稍微不同的輸出。

3、下載lama-2 - 7b - chat GGML二進(jìn)制文件

由于我們將在本地運(yùn)行LLM,所以需要下載量化的lama-2 - 7b - chat模型的二進(jìn)制文件。

我們可以通過訪問TheBloke的Llama-2-7B-Chat GGML頁面來實(shí)現(xiàn),然后下載名為Llama-2-7B-Chat .ggmlv3.q8_0.bin的GGML 8位量化文件。

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

下載的是8位量化模型的bin文件可以保存在合適的項(xiàng)目子文件夾中,如/models。

這個(gè)頁面還顯示了每種量化格式的更多信息和詳細(xì)信息:

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

4、LangChain集成

我們將利用C transformer和LangChain進(jìn)行集成。也就是說將在LangChain中使用CTransformers LLM包裝器,它為GGML模型提供了一個(gè)統(tǒng)一的接口。

 from langchain.llms import CTransformers
 
 # Local CTransformers wrapper for Llama-2-7B-Chat
 llm = CTransformers(model='models/llama-2-7b-chat.ggmlv3.q8_0.bin', # Location of downloaded GGML model
                     model_type='llama', # Model type Llama
                     config={'max_new_tokens': 256,
                             'temperature': 0.01})

這里就可以為LLM定義大量配置設(shè)置,例如最大令牌、最高k值、溫度和重復(fù)懲罰等等,這些參數(shù)在我們以前的文章已經(jīng)介紹過了。

這里我將溫度設(shè)置為0.01而不是0,因?yàn)樵O(shè)置成0時(shí),得到了奇怪的響應(yīng)。

5、構(gòu)建并初始化RetrievalQA

準(zhǔn)備好提示模板和C Transformers LLM后,我們還需要編寫了三個(gè)函數(shù)來構(gòu)建LangChain RetrievalQA對象,該對象使我們能夠執(zhí)行文檔問答。

 from langchain import PromptTemplate
 from langchain.chains import RetrievalQA
 from langchain.embeddings import HuggingFaceEmbeddings
 from langchain.vectorstores import FAISS
 
 # Wrap prompt template in a PromptTemplate object
 def set_qa_prompt():
     prompt = PromptTemplate(template=qa_template,
                             input_variables=['context', 'question'])
     return prompt
 
 
 # Build RetrievalQA object
 def build_retrieval_qa(llm, prompt, vectordb):
     dbqa = RetrievalQA.from_chain_type(llm=llm,
                                        chain_type='stuff',
                                        retriever=vectordb.as_retriever(search_kwargs={'k':2}),
                                        return_source_documents=True,
                                        chain_type_kwargs={'prompt': prompt})
     return dbqa
 
 
 # Instantiate QA object
 def setup_dbqa():
     embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2",
                                        model_kwargs={'device': 'cpu'})
     vectordb = FAISS.load_local('vectorstore/db_faiss', embeddings)
     qa_prompt = set_qa_prompt()
     dbqa = build_retrieval_qa(llm, qa_prompt, vectordb)
 
     return dbqa

6、代碼整合

最后一步就是是將前面的組件組合到main.py腳本中。使用argparse模塊是因?yàn)槲覀儗拿钚袑⒂脩舨樵儌鬟f到應(yīng)用程序中。

這里為了評估CPU推理的速度,還使用了timeit模塊。

 import argparse
 import timeit
 
 if __name__ == "__main__":
     parser = argparse.ArgumentParser()
     parser.add_argument('input', type=str)
     args = parser.parse_args()
     start = timeit.default_timer() # Start timer
 
     # Setup QA object
     dbqa = setup_dbqa()
     
     # Parse input from argparse into QA object
     response = dbqa({'query': args.input})
     end = timeit.default_timer() # End timer
 
     # Print document QA response
     print(f'\nAnswer: {response["result"]}')
     print('='*50) # Formatting separator
 
     # Process source documents for better display
     source_docs = response['source_documents']
     for i, doc in enumerate(source_docs):
         print(f'\nSource Document {i+1}\n')
         print(f'Source Text: {doc.page_content}')
         print(f'Document Name: {doc.metadata["source"]}')
         print(f'Page Number: {doc.metadata["page"]}\n')
         print('='* 50) # Formatting separator
         
     # Display time taken for CPU inference
     print(f"Time to retrieve response: {end - start}")

示例查詢

現(xiàn)在是時(shí)候?qū)ξ覀兊膽?yīng)用程序進(jìn)行測試了。我們用以下命令詢問阿迪達(dá)斯(曼聯(lián)的全球技術(shù)贊助商)應(yīng)支付的最低保證金額:

 python main.py "How much is the minimum guarantee payable by adidas?"

結(jié)果如下:

使用GGML和LangChain在CPU上運(yùn)行量化的llama2,langchain,深度學(xué)習(xí),大語言模型,llama,自然語言處理

我們成功地獲得了正確響應(yīng)(即£7.5億),以及語義上與查詢相似的相關(guān)文檔塊。

從啟動應(yīng)用程序并生成響應(yīng)的總時(shí)間為31秒,這是相當(dāng)不錯(cuò)的,因?yàn)檫@只是在AMD Ryzen 5600X(中低檔的消費(fèi)級CPU)上本地運(yùn)行它。并且在gpu上運(yùn)行LLM推理(例如,直接在HuggingFace上運(yùn)行)也需要兩位數(shù)的時(shí)間,所以在CPU上量化運(yùn)行的結(jié)果是非常不錯(cuò)的。

作者:Kenneth Leung

相關(guān)資源

https://avoid.overfit.cn/post/9df8822ed2854176b68585226485ee0f文章來源地址http://www.zghlxwxcb.cn/news/detail-600048.html

到了這里,關(guān)于使用GGML和LangChain在CPU上運(yùn)行量化的llama2的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 基于Llama2和LangChain構(gòu)建本地化定制化知識庫AI聊天機(jī)器人

    基于Llama2和LangChain構(gòu)建本地化定制化知識庫AI聊天機(jī)器人

    參考: 本項(xiàng)目?https://github.com/PromtEngineer/localGPT 模型?https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGML 云端知識庫項(xiàng)目:基于GPT-4和LangChain構(gòu)建云端定制化PDF知識庫AI聊天機(jī)器人_Entropy-Go的博客-CSDN博客? ????????相比OpenAI的LLM ChatGPT模型必須網(wǎng)絡(luò)連接并通過API key云端調(diào)用模型,擔(dān)心

    2024年02月08日
    瀏覽(33)
  • llama.cpp LLM模型 windows cpu安裝部署;運(yùn)行LLaMA2模型測試

    llama.cpp LLM模型 windows cpu安裝部署;運(yùn)行LLaMA2模型測試

    參考: https://www.listera.top/ji-xu-zhe-teng-xia-chinese-llama-alpaca/ https://blog.csdn.net/qq_38238956/article/details/130113599 cmake windows安裝參考:https://blog.csdn.net/weixin_42357472/article/details/131314105 1、下載: 2、編譯 3、測試運(yùn)行 參考: https://zhuanlan.zhihu.com/p/638427280 模型下載: https://huggingface.co/nya

    2024年02月16日
    瀏覽(29)
  • Llama2通過llama.cpp模型量化 Windows&Linux本地部署

    Llama2通過llama.cpp模型量化 Windows&Linux本地部署

    LLaMA ,它是一組基礎(chǔ)語言模型,參數(shù)范圍從7B到65B。在數(shù)萬億的tokens上訓(xùn)練的模型,并表明可以專門使用公開可用的數(shù)據(jù)集來訓(xùn)練最先進(jìn)的模型,而無需求助于專有和不可訪問的數(shù)據(jù)集。特別是, LLaMA-13B在大多數(shù)基準(zhǔn)測試中都優(yōu)于GPT-3(175B) ,并且LLaMA65B與最好的型號Chinch

    2024年02月05日
    瀏覽(18)
  • 使用langchain及l(fā)lama_index實(shí)現(xiàn)基于文檔(長文本)的相似查詢與詢問

    使用langchain及l(fā)lama_index實(shí)現(xiàn)基于文檔(長文本)的相似查詢與詢問

    前面的總結(jié)是半年前的知識與代碼,但是框架不變,所以不再修改。 但是半年更新了不少內(nèi)容,包括一些類都更換了不少,有同學(xué)問到,所以就又重新寫一份,貼在下面。 考慮到這篇費(fèi)了不少時(shí)間,關(guān)注一下不過分吧(?′?`?) 在調(diào)用ChatGPT接口時(shí),我們常常受到4096個(gè)字符(

    2024年02月09日
    瀏覽(24)
  • 【linux 使用ollama部署運(yùn)行本地大模型完整的教程,openai接口, llama2例子】

    【linux 使用ollama部署運(yùn)行本地大模型完整的教程,openai接口, llama2例子】

    # 安裝相應(yīng)的包 # 開啟ollama服務(wù)端! # 啟動llama2大模型(新開一個(gè)終端) # 如果不想啟動運(yùn)行,只下載可以 在啟動完后,就可以對話了 # python接口對話 ? # OpenAI適配接口對話 # CUR流式接口 # 參考 llama2 (ollama.com) https://ollama.com/library/llama2 OpenAI compatibility · Ollama Blog https://ollama

    2024年03月25日
    瀏覽(50)
  • LangChain+ChatGLM整合LLaMa模型(二)

    LangChain+ChatGLM整合LLaMa模型(二)

    LangChain+ChatGLM大模型應(yīng)用落地實(shí)踐(一) LLaMa模型GitHub地址 添加LLaMa模型配置 在Langchain-ChatGLM/configs/model_config.py中l(wèi)lm_model_dict添加 啟用LLaMa模型 進(jìn)入Web UI選擇LLaMa模型 LLAMA-7B(中文提問當(dāng)作翻譯回答了…看來訓(xùn)練的中文語料不太行,但是英文也算是答對了) 具體為什么LLaMa為什

    2024年02月14日
    瀏覽(20)
  • Llama 2 with langchain項(xiàng)目詳解(一)

    Llama 2 with langchain項(xiàng)目詳解(一)

    Llama 2 with langchain項(xiàng)目詳解(一) 2023年2月25日,美國Meta公司發(fā)布了Llama 1開源大模型。隨后,于2023年7月18日,Meta公司發(fā)布了Llama 2開源大模型,該系列包括了70億、130億和700億等不同參數(shù)規(guī)模的模型。相較于Llama 1,Llama 2的訓(xùn)練數(shù)據(jù)增加了40%,上下文長度提升至4096,是Llama 1的

    2024年02月14日
    瀏覽(21)
  • Llama 2 with langchain項(xiàng)目詳解(三)

    Llama 2 with langchain項(xiàng)目詳解(三) 17.3 Llama 2 with langchain基礎(chǔ) 本節(jié)講解在LangChain中使用Llama 2模型的基礎(chǔ)知識,展示如何運(yùn)行LangChain的代碼,及在云端運(yùn)行Llama 2的700億模型。 首先,使用Python的pip管理器安裝一系列庫,包括huggingface/transformers、datasets、loralib、sentencepiece、bitsandb

    2024年02月14日
    瀏覽(19)
  • 本地搭建【文檔助手】大模型版(LangChain+llama+Streamlit)

    本地搭建【文檔助手】大模型版(LangChain+llama+Streamlit)

    本文的文檔助手就是:我們上傳一個(gè)文檔,然后在對話框中輸入問題,大模型會把問題的答案返回。 先下載代碼到本地 LangChain調(diào)用llama模型的示例代碼:https://github.com/afaqueumer/DocQA(代碼不是本人寫的,尊重原創(chuàng)) 環(huán)境安裝 如果沒反應(yīng)可能是缺少環(huán)境,打開控制臺手動執(zhí)行

    2024年02月04日
    瀏覽(20)
  • Chatbot開發(fā)三劍客:LLAMA、LangChain和Python

    Chatbot開發(fā)三劍客:LLAMA、LangChain和Python

    聊天機(jī)器人(Chatbot)開發(fā)是一項(xiàng)充滿挑戰(zhàn)的復(fù)雜任務(wù),需要綜合運(yùn)用多種技術(shù)和工具。在這一領(lǐng)域中,LLAMA、LangChain和Python的聯(lián)合形成了一個(gè)強(qiáng)大的組合,為Chatbot的設(shè)計(jì)和實(shí)現(xiàn)提供了卓越支持。 首先,LLAMA是一款強(qiáng)大的自然語言處理工具,具備先進(jìn)的語義理解和對話管理功能

    2024年02月05日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包