ReplitLM模型系列的指南、程式碼和配置。
它正在不斷更新,以添加更多使用和建立我們的模型的方法。
模型 | 檢查點 [CC BY-SA 4.0] | 詞彙 [CC BY-SA 4.0] | 代碼[阿帕奇2.0] |
---|---|---|---|
重複碼-v1-3b | 下載連結 | 下載 | 回購協議 |
重複碼-v1_5-3b | (即將推出) | (即將推出) | 即將推出 |
2023 年 5 月 2 日: replit-code-v1-3b
我們還為replit-code-v1-3b
模型提供了一個由 GPU 驅動的空間,您可以在其中直接使用該模型!
GPU 驅動的託管演示
所有已發布的 Replit 模型均可在 Replit 組織頁面下的 Hugging Face 上找到,並且可與 Hugging Face Transformers 庫一起使用。
您可以將 Replit 模型與 Hugging Face Transformers 庫一起使用。每個已發布模型的自述文件都包含有關如何將模型與 Hugging Face Transformer 一起使用的說明。使用分詞器進行解碼時,請確保設定clean_up_tokenization_spaces=False
,並使用自述文件中建議的後處理。
模型 | 自述文件 |
---|---|
重複碼-v1-3b | 文件 |
我們建議使用 MosaicML 的 LLM Foundry 和 Composer 對 Replit 模型進行進一步的訓練、預訓練和微調。
我們的 Replit 模型與 LLM Foundry 相容,並且可以使用最先進的訓練技術、架構組件、優化器等,透過 LLM Foundry + Composer 以高度優化的方式進行訓練/調整。所有模型、LLM Foundry 和 Composer 訓練框架都是基於 Pytorch 的。使用這些,您可以在自己的資料集上訓練 Replit 模型。
以下步驟概述了訓練模型所需執行的操作,並提供了每個步驟所需的 LLM Foundry 文件部分的連結:
安裝LLM Foundry
要開始使用 LLM Foundry,您可以按照 LLM Foundry 自述文件進行操作:
在高層次上,LLM Foundry 的使用方法是定義一個配置 yaml,然後使用像composer train/train.py <configuration_yaml_path> <extra_args>
這樣的指令,使用定義的設定 yaml 在 LLM Foundry 儲存庫中執行train/train.py
訓練composer train/train.py <configuration_yaml_path> <extra_args>
。 script/train/yamls 目錄包含用於微調和預保留的範例 YAML。
安裝 Replit 模型的其他要求
然後,您必須安裝在requirements.txt
中指定的一些其他依賴項。
要使用 LLM Foundry 進行訓練,您需要將資料集轉換為 Mosaic StreamingDataset 格式。
支援的資料集來源類型為 JSON 資料集和 Hugging Face 資料集。
LLM Foundry 中的資料準備文件提供如何執行此操作的步驟。
在上述步驟中執行convert_dataset_hf.py
或convert_dataset_json.py
時,您必須透過傳入參數--tokenizer replit/replit-code-v1-3b
來指定您正在使用Replit tokenizer。關鍵步驟(由於llm-foundry
的目前實作)是在main()
方法中載入 tokenizer 時,透過將trust_remote_code=True
kwarg 傳遞給AutoTokenizer.from_pretrained
呼叫來編輯scripts/data_prep/convert_dataset_hf.py
測試您轉換後的資料集
要測試轉換後的資料集並檢查它是否可以與資料載入器配合使用,您可以按照 LLM Foundry 文件中的測試資料載入器部分進行操作。
要使用 LLM Foundry 進行訓練,您需要定義運行配置 yaml。此 yaml 定義了模型、訓練資料集、評估資料集和指標、訓練參數等。
使用 Replit 模型
對於您定義的任何用於使用 LLM Foundry 進行訓練/調整的配置 YAML,您可以透過取代 YAML 中的模型和分詞器鍵來插入和使用 Replit 模型,如下所示:
...
model:
name: hf_causal_lm
pretrained: true
pretrained_model_name_or_path: replit/replit-code-v1-3b
config_overrides:
attn_config:
attn_impl: triton
attn_uses_sequence_id: false
tokenizer:
name: replit/replit-code-v1-3b
kwargs:
model_max_length: ${max_seq_len}
trust_remote_code: true
...
這將為您的配置載入我們的模型及其來自 Hugging Face 的權重。
轉換資料集並定義運行配置 yaml 後,您可以使用 LLM Foundry 運行訓練。
請依照 LLM Foundry 文件中的「如何開始訓練」部分進行訓練。本節向您展示如何運行單節點和多節點訓練。實際上,您將使用像composer train/train.py <configuration_yaml_path> <extra_args>
這樣的指令,使用定義的設定yaml 執行LLM Foundry 儲存庫中的scripts/train/train.py
訓練腳本。
Composer 中有一些硬編碼邏輯,我們需要繞過這些邏輯才能保存檢查點。在scripts/train/train.py
訓練腳本中,在模型初始化之後和設定訓練資料載入器之前加入行model.tokenizer = None
,即在撰寫本文時, main()
中的第 147 行。這有效地確保了我們不會用檢查點狀態保存標記器。我們需要此解決方法,因為目前 Composer 無法使用包含*.py
檔案的標記器來處理儲存檢查點。
您可以根據自己的用例指示調整我們的ReplitLM模型。對於大多數指令調整用例,我們建議從下面的擁抱臉部範例開始。除此之外,我們也提供了使用 LLM Foundry 進行指令調校的詳細指南。
您可以使用transformers
庫在 Alpaca 風格資料集上指示調整replit-code-v1-3b
模型。
為了實現這一點,您將需要一個已經採用羊駝風格格式的指導調整資料集,例如:
開源貢獻者 Teknium 已將原始 Alpaca 儲存庫分叉到 stanford_alpaca-replit 儲存庫,該儲存庫已預先配置為與我們的模型一起運行。我們強烈建議您以此為起點。
該存儲庫包含有關如何設定和運行訓練器的說明。此處描述了所需的羊駝風格資料集格式。任何羊駝風格的資料集都可以與訓練器配合使用。例如,Code Alpaca 資料集可用於指導使用 Teknium 儲存庫中的訓練腳本調整我們的模型。
您也可以使用 LLM Foundry 進行指令調校。為此,您需要執行以下高級步驟,並根據需要連結到您需要遵循的具體詳細資訊和步驟:
安裝LLM Foundry
要開始使用 LLM Foundry,您可以按照 LLM Foundry 自述文件進行操作:
在高層次上,LLM Foundry 的使用方法是定義一個配置 yaml,然後使用像composer train/train.py <configuration_yaml_path> <extra_args>
這樣的指令,使用定義的設定 yaml 在 LLM Foundry 儲存庫中執行train/train.py
訓練composer train/train.py <configuration_yaml_path> <extra_args>
。 script/train/yamls 目錄包含用於微調和預保留的範例 YAML。
安裝 Replit 模型的其他要求
然後,您必須安裝在requirements.txt
中指定的一些其他依賴項。
可以是以下任一項:
根據您使用的資料集,您可能需要也可能不需要將資料集格式化為 LLM Foundry 期望的格式。
不需要自訂預處理的資料集
一些資料集(例如mosaicml/dolly_hhrlhf)已經附帶了可以立即使用的預處理功能。截至發佈時,以下 Hugging Face 資料集附帶了預先註冊的預處理函數: HuggingFaceH4/databricks_dolly_15k
、 Muennighoff/P3
、 Muennighoff/flan
、 bigscience/P3
、 tatsu-lab/alpaca
。
需要自訂預處理的資料集
如果您不使用上述任何資料集,則需要編寫自己的預處理函數並註冊它。
對於任何資料集,您需要將每個範例格式化為具有以下鍵的字典:
formatted_example = { 'prompt' : < prompt_text > , 'response' : < response_text > }
即,每個樣本都是一個有兩個鍵的字典。這是finetuning
資料載入器期望下游的格式。
資料集格式化指南
原始 LLM Foundry 儲存庫中的資料格式化部分描述如何執行此操作。
如果您需要建立自訂預處理函數以將資料轉換為正確的格式,而 LLM Foundry 文件中的步驟讓您感到困惑,TL;DR 解釋如下:
preprocess.py
),只要訓練腳本可以匯入該檔案即可。preprocess_function()
,該函數將資料集中的一個樣本作為輸入,並根據如何將樣本格式化為所需格式的邏輯,傳回一個帶有上述鍵prompt
和response
字典。preprocess.py
)和函數(例如preprocess_function()
)。 現在您可以使用資料集來微調 Replit 模型。
指導
原始 LLM Foundry 儲存庫中的「使用」部分描述如何使用資料集並微調 Replit 模型。
如果您在該部分中使用選項 1) 或 2),您將根據前兩個步驟中的操作修改訓練 YAML 中的train_loader
和eval_loader
(如果適用)。如果您使用選項 3)(即流資料集),您將首先使用提示鍵和回應鍵將資料集轉換為正確的格式,然後將其寫入本機 MDS 資料集。之後,您可以修改 YAML 以指向此。