iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
生成式 AI

LLM與生成式AI筆記系列 第 9

Day 09: LLM 應用學習路線

  • 分享至 

  • xImage
  •  

這邊第一部分跟第七天是相同的,放這邊只是為了讓其他人對整個流程有更好的了解。

另外假如裡面有任何錯誤的話也請拜託馬上通知我。

這部分還會持續的修改,目前大致上是這樣。

1. 運行 LLMs

運行 LLMs 的教學指南

運行大型語言模型(LLMs)可能會因為硬體要求高而變得困難。根據您的使用案例,您可以選擇通過API(如GPT-4)使用模型,或者在本地運行它。以下是一步一步的指南,幫助您開始運行LLMs。

相關的 deeplearning.ai短課程:

  1. 使用LLM APIs 或 Agent 套件:
  2. 運行開源 LLMs
  3. 提示工程(Prompt Engineering)

步驟 1:使用 LLM APIs

APIs 是部署 LLMs 的便捷方式。以下是如何使用一些常見的私有和開源 LLM APIs。

  1. 選擇 LLM API 提供商

  2. 註冊並獲取 API Key

    • 訪問所選提供商的網站,註冊一個帳戶並獲取 API Key。
    • 例如,註冊 OpenAI 的 API Key 可以訪問 OpenAI 平台
  3. 使用 API 進行請求

    • 使用所獲取的 API Key,在您的應用程序中集成 API。
    • 例如,使用 OpenAI 的 API,可以參考以下 Python 代碼:
      import openai
      
      openai.api_key = 'your-api-key-here'
      
      response = openai.Completion.create(
          engine="text-davinci-003",
          prompt="Hello, world!",
          max_tokens=50
      )
      
      print(response.choices[0].text.strip())
      

步驟 2:運行開源 LLMs

如果您希望在本地運行開源 LLMs,可以按照以下步驟進行。

  1. 選擇開源 LLM

  2. 使用 LM Studio 和同類型應用在本地運行模型

  3. 使用 Hugging Face 的 Transformer

    • 安裝 transformers 庫:
      pip install transformers
      
    • 使用以下代碼加載並運行模型:
      from transformers import pipeline
      
      generator = pipeline('text-generation', model='gpt2')
      response = generator("Hello, world!", max_length=50)
      
      print(response[0]['generated_text'])
      

步驟 3:提示工程(Prompt Engineering)

優化提示可以大大改善 LLM 的輸出效果。以下是一些常見的提示工程技術。

  1. 零提示詞(Zero-shot)

    • 直接向模型提出問題或指令,無需示例。
    • 例如:
      prompt = "What is the capital of France?"
      
  2. 少量提示詞(Few-shot)

    • 提供一些示例,以幫助模型理解您的需求。
    • 例如:
      prompt = "Translate the following English sentences to French:\n\n1. Hello, how are you? -> Bonjour, comment ça va?\n2. What is your name? -> Comment tu t'appelles?\n3. Where is the nearest restaurant? -> Où est le restaurant le plus proche?\n4. How much does this cost? -> Combien ça coûte?"
      
  3. 思維鏈(Chain of Thought)與 ReAct

    • 使用逐步思考的方式,引導模型逐步解決問題。
    • 例如:
      prompt = "First, let's consider the problem step by step. What is 5 plus 3? Then, what is the result multiplied by 2?"
      
  4. 相關學習資源

步驟 4:結構化輸出(Structuring Outputs)

許多任務需要結構化的輸出,如嚴格的模板或JSON格式。以下是一些工具和方法。

  1. 使用 LMQL 指導生成

    • 安裝並使用 LMQL 庫來指導生成符合結構的輸出。
    • 參考 LMQL - Overview 的介紹。
  2. 使用 Outlines 庫

    • 安裝並使用 Outlines 庫來生成結構化輸出。
    • 參考 Outlines - Quickstart 的快速入門指南。
  3. 相關學習資源


2. 建立向量儲存

創建向量儲存是建立檢索增強生成(Retrieval Augmented Generation,簡稱RAG)流程的第一步。文件被加載、拆分,並使用相關的片段來產生向量表示(嵌入),這些向量表示將被存儲以便在推理過程中使用。


相關的 deeplearning.ai短課程:


  • 文檔導入 Ingesting documents: 文檔加載器是方便的包裝器,可以處理多種格式: PDF, JSON, HTML, Markdown, 等。 它們還可以直接從一些數據庫和API(GitHub, Reddit, Google Drive, 等)檢索數據。
  • 文檔拆分 Splitting documents: 文本拆分器將文檔拆分成較小的、語義上有意義的片段。通常最好不要在n個字符後拆分文本,而是按照標題或遞迴地拆分,並附帶一些額外的元數據。
  • 嵌入模型 Embedding models: 嵌入模型將文本轉換為向量表示。這允許對語言進行更深入、更細膩的理解,這對於進行語義搜索至關重要。
  • 向量數據庫 Vector databases: 向量數據庫(如 Chroma, Pinecone, Milvus, FAISS, Annoy, 等)專為儲存嵌入向量而設計。它們支援基於向量相似性有效檢索與查詢最相似的數據。

3. Retrieval Augmented Generation 檢索增強生成

借助 RAG,LLMs 可以從資料庫中檢索上下文文檔,以提高答案的準確性。RAG 是一種無需任何微調即可增強模型知識的流行方法。

  • Orchestrators 協作器: Orchestrators 協作器 (如 LangChain, LlamaIndex, FastRAG, 等)是流行的框架,用於將您的 LLM 與工具、資料庫、記憶體等連接起來並增強他們的能力。
  • Retrievers 檢索器: 使用者指令未針對檢索進行最佳化。可以應用不同的技術(例如,多查詢檢索器、 HyDE, 等)來重新表述/擴展它們並提高效能。
  • 記憶: 為了記住先前的說明和答案,LLM 和 ChatGPT 等聊天機器人會將此歷史記錄添加到其上下文視窗中。此緩衝區可以透過匯總(例如,使用較小的 LLM)、向量儲存 + RAG 等來改進。
  • 評估: 我們需要評估文件檢索(上下文精確度和召回率)和生成階段(可信度和答案相關性)。可以使用 RagasDeepEval工具進行簡化。

4. 進階 RAG

現實應用程式可能需要複雜的管道,包括 SQL 或圖形資料庫,以及自動選擇相關工具和 API。這些先進技術可以改進基準解決方案並提供附加功能。

相關的 deeplearning.ai短課程:
- Advanced Retrieval for AI with Chroma:這門課程專注於高級信息檢索技術,尤其是在使用大語言模型(LLM)和向量數據庫時的應用。課程涵蓋的主題包括查詢擴展、交叉編碼重排序,以及通過嵌入適配器來改進檢索結果。
- Multi AI Agent Systems with crewAI:這門課程專注於多AI代理系統(Multi-AI Agent Systems),使用CREW AI工具進行開發和協作。課程內容涵蓋如何設計和管理多個AI代理之間的交互,並通過協同工作來完成複雜任務。

  • 查詢建構: 儲存在傳統數據庫中的結構化數據需要特定的查詢語言,如SQL、Cypher、元數據等。我們可以直接將用戶指令翻譯成查詢,通過查詢建構來存取數據。
  • 代理與工具: 代理透過自動選擇最相關的工具來增強LLMs的回答能力。這些工具可以像使用Google或Wikipedia那麼簡單,或者像Python解釋器或Jira這樣複雜。
  • 後處理: 處理輸入到LLM的最後一步。它通過重新排序、RAG融合和分類來增強檢索文檔的相關性和多樣性。

5. Inference optimization 推理優化

文本生成是一個成本高昂的過程,需要昂貴的硬體設備。除了量化之外,還有各種技術被提出以最大化吞吐量並降低推論成本。

  • 主要內容:
    • GPU Inference by Hugging Face: 解釋如何在GPU上優化推論.
    • LLM Inference by Databricks: 實際運作中優化LLM推論的最佳實踐。
  • Flash Attention 閃存注意力: 優化注意力機制,將其複雜性從二次方變成線性以加快訓練和推論速度。
  • Key-value cache 鍵值快取: 請多了解鍵值快取以及多查詢注意力(Multi-Query Attention (MQA))和(分組查詢注意力Grouped-Query Attention (GQA))帶來的改進。
  • Speculative decoding 投機解碼: 使用小型模型產生草稿,然後由更大的模型審核,以加快文本生成速度。
    • Assisted Generation by Hugging Face: HF版本的投機解碼,這是一篇有趣的博客文章,介紹了它的工作原理及其實現代碼。

6. Deploying LLMs 部署大型語言模型

在大規模部署大型語言模型(LLMs)是一項工程壯舉,可能需要多個GPU集群。在其他情景下,演示和本地應用可以更簡單的實現運作。


相關的 deeplearning.ai短課程:
- Serverless LLM apps with Amazon Bedrock:主要內容是使用AWS部署一個LLM app
- Building Generative AI Applications with Gradio:這門課程教授如何使用Gradio平台來構建生成式AI應用。課程內容包括如何設計和構建交互式的AI界面,讓用戶能夠輕鬆地與生成式AI模型進行互動。


  • Local deployment 本地部署: 隱私是開源LLMs相對於私有LLMs的一個重要優勢。 本地LLM服務器 (LM Studio, Ollama, oobabooga, kobold.cpp, 等)利用這一優勢為本地應用提供動力。
  • Demo deployment 演示部署:像 GradioStreamlit 這樣的框架有助於原型應用的開發和演示的分享。您也可以輕鬆地在線上部署,例如使用 Hugging Face Spaces
  • Server deployment 服務器部署: 大規模部署LLMs需要雲端 (詳見 SkyPilot) 或內部部署的基礎設施,並經常利用優化的文本生成框架,如 TGI, vLLM等。
  • Edge deployment 邊緣(中低算力)部署: 在受限環境中,高性能框架如 MLC LLMmnn-llm 可以在網頁瀏覽器、Android和iOS中部署LLM。

7. Securing LLMs

除了與軟體相關的傳統安全問題外,由於訓練和提示的方式,大型語言模型(LLMs)還有特定的弱點。


相關的 deeplearning.ai短課程:
- Red Teaming LLM Applications:這門課程教授如何進行紅隊測試(Red Teaming),以評估和改進大型語言模型(LLM)應用的安全性和可靠性。


  • Prompt hacking 提示詞攻擊: 與提示工程相關的技術略有不同,提示詞注入(使用額外指令以劫持模型的答案)、數據/提示洩漏(檢索其原始數據/提示)和越獄(製作提示詞以繞過安全特性)都算在此範圍內。
  • Backdoors 後門: 攻擊向量可以針對訓練數據本身,通過污染訓練數據(例如,使用錯誤信息)或創建後門(觸發器在推論期間秘密的改變模型行為)。
  • Defensive measures 防禦措施: 保護您的LLM應用程序的最佳方式是對這些漏洞進行測試 (e.g., 例如,使用紅隊測試和像garak這樣的檢查 ) 並在實際的環境中觀察它們(使用像langfuse這樣的框架)。

📚 References:


其他的deeplearning.ai短課程:

  • Automated Testing for LLMOps:門課程主要教導如何在LLMOps(大型语言模型操作)環境中進行自動化測試。內容涵蓋測試策略的制定、測試案例的設計和執行,以及如何確保模型的可靠性和性能。
  • Prompt Engineering for Vision Models:這門課程專注於視覺模型的提示工程(Prompt Engineering),教你如何有效地設計和應用提示來優化視覺模型的表現。
  • Federated Learning:這門課程介紹了**聯邦學習(Federated Learning)**的基本概念和應用。聯邦學習是一種分佈式機器學習技術,允許多個設備或機構在不共享數據的情況下協作訓練模型,從而保護數據隱私。
  • Pair Programming with a Large Language Model:這門課程介紹了如何使用大型語言模型(LLM)進行配對編程(Pair Programming)。課程教導如何利用LLM來提高編程效率,特別是在編寫和調試代碼時。
  • Carbon Aware Computing for GenAI Developers:這門課程教授如何在生成式AI(GenAI)開發中實施碳感知計算(Carbon-Aware Computing)。課程內容包括如何優化AI模型的能耗、減少碳足跡,以及在選擇計算資源時考慮環境影響。這門課程旨在幫助開發者在進行AI模型訓練和推理時,做出更環保的決策,並促進可持續的AI開發。
  • LLMOps:這門課程教授如何在LLMOps(大型語言模型操作)環境中進行管理和部署,涵蓋了從模型訓練到上線維護的整個過程。課程內容包括模型監控、版本控制、持續集成與部署(CI/CD),以及如何在實際生產環境中優化和管理大型語言模型。
  • Quantization Fundamentals with Hugging Face:這門課程專注於量化技術的基礎知識,並如何在Hugging Face平台上應用它來優化深度學習模型的性能。課程涵蓋了量化技術的基本原理、優勢以及如何在不顯著降低模型精度的情況下減少模型的計算資源需求和存儲空間。
  • Quantization in Depth:這門課程深入探討了量化技術,教導如何在模型開發中應用高級量化技術來提高深度學習模型的效率和性能。課程涵蓋量化方法的細節,如動態和靜態量化,以及如何在保持模型精度的同時顯著減少計算資源和存儲需求。

上一篇
Day 08: LLM 大致流程:從訓練資料收集, 預訓練模型選擇,微調,對齊,到壓縮和評估
下一篇
Day 10: 醫療Chatbot, Code LLM 插件以及RPA LLM 的 survey
系列文
LLM與生成式AI筆記31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言