Mixtral:數據流中的生成式稀疏專家混合模型
譯文Cloudera公司數據流首席工程師Tim Spann 表示,Mixtral-8x7B大型語言模型(LLM)是一個預先訓練的生成式稀疏專家混合模型。
他表示,這個模型很有趣,也很容易理解。在適當的提示下,它似乎表現很好。而通過用例,他并不確定Mixtral-8x7B是否比Google Gemma、Meta LLAMA2或OLLAMA Mistral更好。
Spann撰寫的文章將展示如何使用Mixtral LLM,只需要幾個步驟就可以針對文本輸入運行Mixtral LLM。
該模型可以由輕量級無服務器REST API或Transformer庫運行。也可以使用GitHub存儲庫,其場景最多可以有32000個令牌。開發人員還可以輸入英語、意大利語、德語、西班牙語和法語的提示。關于如何利用這一模型有很多選項,而本文將展示如何利用Apache NiFi系統構建實時LLM管道。
開發人員需要決定的一個關鍵問題是將使用什么樣的輸入(聊天、代碼生成、問答、文檔分析、摘要等)。一旦決定輸入,需要創建一些提示,并且進行調整。文中將提供一些指導,幫助提高快速構建技能。Spann在其演練教程中介紹一些基本的提示工程。
構建最佳提示的指南
提示符的構建對于使其正常工作非常關鍵,因此使用Apache NiFi系統構建提示符。
流程概述
步驟1:創建并格式化提示符
在構建應用程序時,以下是將要使用的基本提示模板。
提示模板
{
"inputs":
"<s>[INST]Write a detailed complete response that appropriately
answers the request.[/INST]
[INST]Use this information to enhance your answer:
${context:trim():replaceAll('"',''):replaceAll('\n', '')}[/INST]
User: ${inputs:trim():replaceAll('"',''):replaceAll('\n', '')}</s>"
}
將在ReplaceText處理器的替換值字段中輸入這個提示符。
步驟2:構建對HuggingFace REST API的調用,根據模型進行分類
在數據流中添加一個InvokeHTTP處理器,將HTTP URL設置為Mixtral API URL。
步驟3:查詢轉換和清理結果
使用QueryRecord處理器來清理和轉換抓取generated_text字段的HuggingFace結果。
步驟4:添加元數據字段
使用UpdateRecord處理器來添加元數據字段、JSON讀取器和寫入器,以及文字值替換值策略(Literal Value Replacement Value Strategy)。而正在添加的字段是添加屬性。
發送到Kafka和Slack的概述。
步驟5:將元數據添加到數據流
使用UpdateAttribute處理器來添加正確的“application/json Content Type”,并將模型類型設置為Mixtral。
步驟6:將清理后的記錄發送到Kafka Topic
將它發送到本地Kafka代理(可能是Docker或其他)和flank-mixtral8x7B主題。如果不存在,NiFi和Kafka會自動創建一個。
步驟7:重新嘗試發送
如果出現問題,將嘗試重新發送三次,然后中止。
將數據推送到Slack的概述。
步驟8:將相同的數據發送到Slack供用戶回復
第一步是拆分為單個記錄,每次發送一個記錄。為此使用SplitRecord處理器。
和以前一樣,重用JSON樹讀取器和JSON記錄集編寫器。像往常一樣,選擇“1”作為“每次拆分的記錄”。
步驟9:使生成的文本可用于消息傳遞
使用EvaluateJsonPath從Mixtral (on HuggingFace)提取生成的文本。
步驟10:將回復發送到Slack
使用PublishSlack處理器,這是Apache NiFi 2.0的新功能。這需要設定頻道名稱或頻道ID。選擇使用“Message Text”屬性的發布策略。對于消息文本,使用下面的Slack Response模板。
對于用戶的最終回復需要一個 Slack 響應模板,該模板的格式應符合需要的溝通方式。以下是一個具有基本功能的示例。
Slack響應模板
===============================================================================================================
HuggingFace ${modelinformation} Results on ${date}:
Question: ${inputs}
Answer:
${generated_text}
=========================================== Data for nerds ====
HF URL: ${invokehttp.request.url}
TXID: ${invokehttp.tx.id}
== Slack Message Meta Data ==
ID: ${messageid} Name: ${messagerealname} [${messageusername}]
Time Zone: ${messageusertz}
== HF ${modelinformation} Meta Data ==
Compute Characters/Time/Type: ${x-compute-characters} / ${x-compute-time}/${x-compute-type}
Generated/Prompt Tokens/Time per Token: ${x-generated-tokens} / ${x-prompt-tokens} : ${x-time-per-token}
Inference Time: ${x-inference-time} // Queue Time: ${x-queue-time}
Request ID/SHA: ${x-request-id} / ${x-sha}
Validation/Total Time: ${x-validation-time} / ${x-total-time}
===============================================================================================================
運行這一程序時,它將看起來像Slack中的下圖。
現在已經向 Hugging Face 發送了提示,讓它針對 Mixtral 運行,將結果發送到 Kafka,并通過 Slack 回復用戶。
現在已經用零代碼完成了完整的Mixtral應用程序。
結論
現在,已經使用Apache NiFi、HuggingFace和Slack構建了一個完整的往返程序,以使用新的Mixtral模型構建聊天機器人。
學習摘要
- 學會了如何為HuggingFace Mixtral建立一個提示
- 學習如何清理數據流
- 構建一個可以重用的HuggingFace REST調用
- 處理HuggingFace模型調用結果
- 發送第一條 Kafka 消息
- 格式化和構建Slack調用
- 為生成式人工智能構建一個完整的數據流
如果需要使用新的Apache NiFi 2.0的其他教程,可以查看:
以下是有關構建Slack機器人的更多信息:
- Building a Real-Time Slackbot With Generative AI
- Building an LLM Bot for Meetups and Conference Interactivity
Tim Spann正在編寫Apache NiFi 2和生成式人工智能教程。
以下是他提供的一些資源:
Invoke the Mixtral 8x7B model on Amazon Bedrock for text generation
Running Mixtral 8x7b on M1 16GB
Mixtral-8x7B: Understanding and Running the Sparse Mixture of Experts by Mistral AI
Retro-Engineering a Database Schema: Mistral Models vs. GPT4, LLama2, and Bard (Episode 3)
Comparison of Models: Quality, Performance & Price Analysis
A Beginner’s Guide to Fine-Tuning Mixtral Instruct Model
原文標題:Mixtral: Generative Sparse Mixture of Experts in DataFlows,作者:Tim Spann
鏈接:https://dzone.com/articles/mixtral-generative-sparse-mixture-of-experts-in-da。