非工程师指南: 训练 LLaMA 2 聊天机器人
引言
本教程將向你展示在不編寫一行代碼的情況下,如何構建自己的開源 ChatGPT,這樣人人都能構建自己的聊天模型。我們將以 LLaMA 2 基礎模型為例,在開源指令數據集上針對聊天場景對其進行微調,并將微調后的模型部署到一個可分享的聊天應用中。全程只需點擊鼠標,即可輕松通往榮耀之路!??
為什么這很重要?是這樣的,機器學習,尤其是 LLM (Large Language Models,大語言模型),已前所未有地普及開來,漸漸成為我們生產生活中的重要工具。然而,對非機器學習工程專業的大多數人來說,訓練和部署這些模型的復雜性似乎仍然遙不可及。如果我們理想中的機器學習世界是充滿著無處不在的個性化模型的,那么我們面臨著一個迫在眉睫的挑戰,即如何讓那些沒有技術背景的人獨立用上這項技術?
在 Hugging Face,我們一直在默默努力為這個包容性的未來鋪平道路。我們的工具套件,包括 Spaces、AutoTrain 和 Inference Endpoints 等服務,就是為了讓任何人都能進入機器學習的世界。
為了展示這個*化的未來是何其輕松,本教程將向你展示如何使用 Spaces、AutoTrain 和 ChatUI 構建聊天應用。只需簡單三步,代碼含量為零。聲明一下,我們也不是機器學習工程師,而只是 Hugging Face 營銷策略團隊的一員。如果我們能做到這一點,那么你也可以!話不多說,我們開始吧!
Spaces 簡介
Hugging Face 的 Spaces 服務提供了易于使用的 GUI,可用于構建和部署 Web 托管的 ML 演示及應用。該服務允許你使用 Gradio 或 Streamlit 前端快速構建 ML 演示,將你自己的應用以 docker 容器的形式上傳,甚至你還可以直接選擇一些已預先配置好的 ML 應用以實現快速部署。
后面,我們將部署兩個來自 Spaces、AutoTrain 和 ChatUI 的預配置 docker 應用模板。
你可參閱 此處,以獲取有關 Spaces 的更多信息。
AutoTrain 簡介
AutoTrain 是一款無代碼工具,可讓非 ML 工程師 (甚至非開發人員??) 無需編寫任何代碼即可訓練最先進的 ML 模型。它可用于 NLP、計算機視覺、語音、表格數據,現在甚至可用于微調 LLM,我們這次主要用的就是 LLM 微調功能。
你可參閱 此處,以獲取有關 AutoTrain 的更多信息。
ChatUI 簡介
ChatUI 顧名思義,是 Hugging Face 構建的開源 UI,其提供了與開源 LLM 交互的界面。值得注意的是,它與 HuggingChat 背后的 UI 相同,HuggingChat 是 ChatGPT 的 100% 開源替代品。
你可參閱 此處,以獲取有關 ChatUI 的更多信息。
第 1 步: 創建一個新的 AutoTrain Space
1.1 在 huggingface.co/spaces 頁面點擊 “Create new Space” 按鈕。
1.2 如果你計劃公開這個模型或 Space,請為你的 Space 命名并選擇合適的許可證。
1.3 請選擇 Docker > AutoTrain,以直接用 AutoTrain 的 docker 模板來部署。
1.4 選擇合適的 “Space hardware” 以運行應用。(注意: 對于 AutoTrain 應用,免費的 CPU 基本款就足夠了,模型訓練會使用單獨的計算來完成,我們稍后會進行選擇)。
1.5 在 “Space secrets” 下添加你自己的 “HF_TOKEN”,以便讓該 Space 可以訪問你的 Hub 帳戶。如果沒有這個,Space 將無法訓練或將新模型保存到你的帳戶上。(注意: 你可以在 “Settings > Access Tokens” 下的 “Hugging Face Profile” 中找到你的 HF_TOKEN ,請確保其屬性為 “Write”)。
1.6 選擇將 Space 設為“私有”還是“公開”,對于 AutoTrain Space 而言,建議設為私有,不影響你后面公開分享你的模型或聊天應用。
1.7 點擊 “Create Space” 并稍事等待!新 Space 的構建需要幾分鐘時間,之后你就可以打開 Space 并開始使用 AutoTrain。
第 2 步: 在 AutoTrain 中啟動模型訓練
2.1 AutoTrain Space 啟動后,你會看到下面的 GUI。AutoTrain 可用于多種不同類型的訓練,包括 LLM 微調、文本分類、表格數據以及擴散模型。我們今天主要專注 LLM 訓練,因此選擇 “LLM” 選項卡。
2.2 從 “Model Choice” 字段中選擇你想要訓練的 LLM,你可以從列表中選擇模型或直接輸入 Hugging Face 模型卡的模型名稱,在本例中我們使用 Meta 的 Llama 2 7B 基礎模型,你可從其 模型卡 處了解更多信息。(注意: LLama 2 是受控模型,需要你在使用前向 Meta 申請訪問權限,你也可以選擇其他非受控模型,如 Falcon)。
2.3 在 “Backend” 中選擇你要用于訓練的 CPU 或 GPU。對于 7B 模型,“A10G Large” 就足夠了。如果想要訓練更大的模型,你需要確保該模型可以放進所選 GPU 的內存。(注意: 如果你想訓練更大的模型并需要訪問 A100 GPU,請發送電子郵件至 api-enterprise@huggingface.co)。
2.4 當然,要微調模型,你需要上傳 “Training Data”。執行此操作時,請確保數據集格式正確且文件格式為 CSV。你可在 此處 找到符合要求的格式的例子。如果你的數據有多列,請務必選擇正確的 “Text Column” 以確保 AutoTrain 抽取正確的列作為訓練數據。本教程將使用 Alpaca 指令微調數據集,你可在 此處 獲取該數據集的更多信息。你還可以從 此處 直接下載 CSV 格式的文件。
2.5 【可選】 你還可以上傳 “Validation Data” 以用于測試訓出的模型,但這不是必須的。
2.6 AutoTrain 中有許多高級設置可用于減少模型的內存占用,你可以更改精度 (“FP16”) 、啟用量化 (“Int4/8”) 或者決定是否啟用 PEFT (參數高效微調)。如果對此不是很精通,建議使用默認設置,因為默認設置可以減少訓練模型的時間和成本,且對模型精度的影響很小。
2.7 同樣地,你可在 “Parameter Choice” 中配置訓練超參,但本教程使用的是默認設置。
2.8 至此,一切都已設置完畢,點擊 “Add Job” 將模型添加到訓練隊列中,然后點擊 “Start Training”(注意: 如果你想用多組不同超參訓練多個版本的模型,你可以添加多個作業同時運行)。
2.9 訓練開始后,你會看到你的 Hub 帳戶里新創建了一個 Space。該 Space 正在運行模型訓練,完成后新模型也將顯示在你 Hub 帳戶的 “Models” 下。(注: 如欲查看訓練進度,你可在 Space 中查看實時日志)。
2.10 去喝杯咖啡。訓練可能需要幾個小時甚至幾天的時間,這取決于模型及訓練數據的大小。訓練完成后,新模型將出現在你的 Hugging Face Hub 帳戶的 “Models” 下。
第 3 步: 使用自己的模型創建一個新的 ChatUI Space
3.1 按照與步驟 1.1 > 1.3 相同的流程設置新 Space,但選擇 ChatUI docker 模板而不是 AutoTrain。
3.2 選擇合適的 “Space Hardware”,對我們用的 7B 模型而言 A10G Small 足夠了。注意硬件的選擇需要根據模型的大小而有所不同。
3.3 如果你有自己的 Mongo DB,你可以填入相應信息,以便將聊天日志存儲在 “MONGODB_URL” 下。否則,將該字段留空即可,此時會自動創建一個本地數據庫。
3.4 為了能將訓后的模型用于聊天應用,你需要在 “Space variables” 下提供 “MODEL_NAME”。你可以通過查看你的 Hugging Face 個人資料的 “Models” 部分找到模型的名稱,它和你在 AutoTrain 中設置的 “Project name” 相同。本例中模型的名稱為 “2legit2overfit/wrdt-pco6-31a7-0”。
3.5 在 “Space variables” 下,你還可以更改模型的推理參數,包括溫度、top-p、生成的最大詞元數等文本生成屬性。這里,我們還是直接使用默認設置。
3.6 現在,你可以點擊 “Create” 并啟動你自己的開源 ChatGPT,其 GUI 如下。恭喜通關!
如果你看了本文很想嘗試一下,但仍需要技術支持才能開始使用,請隨時通過 此處 聯系我們并申請支持。 Hugging Face 提供付費專家建議服務,應該能幫到你。
英文原文: https://hf.co/blog/Llama2-for-non-engineers
原文作者: Andrew Jardine,Abhishek Thakur
譯者: Matrix Yao (姚偉峰),英特爾深度學習工程師,工作方向為 transformer-family 模型在各模態數據上的應用及大規模模型的訓練推理。
總結
以上是生活随笔為你收集整理的非工程师指南: 训练 LLaMA 2 聊天机器人的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LLM增强LLM;通过预测上下文来提高文
- 下一篇: 2023年度总结