作者: Samaneh Saadat, Matthew Watson
建立日期 2024/04/29
上次修改日期 2024/04/29
說明: 關於如何將微調後的 KerasHub 模型上傳到模型中心的介紹。
微調機器學習模型可以針對特定任務產生令人驚豔的成果。將您微調後的模型上傳到模型中心,可以讓您與更廣泛的社群分享。透過分享您的模型,您將提高其他研究人員和開發人員的可訪問性,使您的貢獻成為機器學習領域不可或缺的一部分。這也可以簡化您的模型整合到實際應用中的過程。
本指南將引導您了解如何將微調後的模型上傳到熱門的模型中心,例如 Kaggle Models 和 Hugging Face Hub。
首先,我們先安裝並導入我們需要的所有函式庫。本指南將使用 KerasHub。
!pip install -q --upgrade keras-hub huggingface-hub kagglehub
import os
os.environ["KERAS_BACKEND"] = "jax"
import keras_hub
本指南可以使用 IMDB 評論資料集。讓我們從 tensorflow_dataset
載入資料集。
import tensorflow_datasets as tfds
imdb_train, imdb_test = tfds.load(
"imdb_reviews",
split=["train", "test"],
as_supervised=True,
batch_size=4,
)
我們僅使用一小部分的訓練樣本,以加快指南的執行速度。但是,如果您需要更高品質的模型,請考慮使用更多的訓練樣本。
imdb_train = imdb_train.take(100)
keras_hub.models.Task
封裝了 keras_hub.models.Backbone
和 keras_hub.models.Preprocessor
,以建立可用於特定文字問題的訓練、微調和預測的模型。在本節中,我們將說明如何建立 Task
、微調並將其上傳到模型中心。
如果您想要根據基礎模型建立因果語言模型 (Causal LM),只需呼叫 keras_hub.models.CausalLM.from_preset
並傳遞內建的預設識別碼即可。
causal_lm = keras_hub.models.CausalLM.from_preset("gpt2_base_en")
Downloading from https://www.kaggle.com/api/v1/models/keras/gpt2/keras/gpt2_base_en/2/download/task.json...
Downloading from https://www.kaggle.com/api/v1/models/keras/gpt2/keras/gpt2_base_en/2/download/preprocessor.json...
載入模型後,您可以呼叫模型上的 .fit()
來微調它。在這裡,我們針對 IMDB 評論微調模型,使模型更特定於電影領域。
# Drop labels and keep the review text only for the Causal LM.
imdb_train_reviews = imdb_train.map(lambda x, y: x)
# Fine-tune the Causal LM.
causal_lm.fit(imdb_train_reviews)
100/100 ━━━━━━━━━━━━━━━━━━━━ 151 秒 1 秒/步 - 損失:1.0198 - 稀疏分類準確度:0.3271
要上傳模型,您需要先使用 save_to_preset
在本機儲存模型。
preset_dir = "./gpt2_imdb"
causal_lm.save_to_preset(preset_dir)
讓我們看看已儲存的檔案。
os.listdir(preset_dir)
['preprocessor.json',
'tokenizer.json',
'task.json',
'model.weights.h5',
'config.json',
'metadata.json',
'assets']
使用 from_preset
可以載入儲存到本機預設的模型。您儲存的內容,就是您取回的內容。
causal_lm = keras_hub.models.CausalLM.from_preset(preset_dir)
您也可以從此預設目錄載入 keras_hub.models.Backbone
和 keras_hub.models.Tokenizer
物件。請注意,這些物件等效於上述的 causal_lm.backbone
和 causal_lm.preprocessor.tokenizer
。
backbone = keras_hub.models.Backbone.from_preset(preset_dir)
tokenizer = keras_hub.models.Tokenizer.from_preset(preset_dir)
將預設儲存到目錄後,可以使用 KerasHub 函式庫直接將此目錄上傳到模型中心,例如 Kaggle 或 Hugging Face。若要將模型上傳到 Kaggle,URI 必須以 kaggle://
開頭,若要上傳到 Hugging Face,則必須以 hf://
開頭。
若要將模型上傳到 Kaggle,首先,我們需要使用 Kaggle 驗證。這可以透過以下其中一種方式完成:1. 設定環境變數 KAGGLE_USERNAME
和 KAGGLE_KEY
。2. 提供本機 ~/.kaggle/kaggle.json
。3. 呼叫 kagglehub.login()
。
在繼續之前,請確保我們已登入。
import kagglehub
if "KAGGLE_USERNAME" not in os.environ or "KAGGLE_KEY" not in os.environ:
kagglehub.login()
若要上傳模型,我們可以使用 keras_hub.upload_preset(uri, preset_dir)
API,其中 uri
的格式為 kaggle://<KAGGLE_USERNAME>/<MODEL>/Keras/<VARIATION>
,用於上傳到 Kaggle,而 preset_dir
是儲存模型的目錄。
執行以下內容會將儲存在 preset_dir
中的模型上傳到 Kaggle。
kaggle_username = kagglehub.whoami()["username"]
kaggle_uri = f"kaggle://{kaggle_username}/gpt2/keras/gpt2_imdb"
keras_hub.upload_preset(kaggle_uri, preset_dir)
Upload successful: preprocessor.json (834B)
Upload successful: tokenizer.json (322B)
Upload successful: task.json (2KB)
Upload successful: model.weights.h5 (475MB)
Upload successful: config.json (431B)
Upload successful: metadata.json (142B)
Upload successful: merges.txt (446KB)
Upload successful: vocabulary.json (1018KB)
Your model instance version has been created.
若要將模型上傳到 Hugging Face,首先,我們需要使用 Hugging Face 驗證。這可以透過以下其中一種方式完成:1. 設定環境變數 HF_USERNAME
和 HF_TOKEN
。2. 呼叫 huggingface_hub.notebook_login()
。
在繼續之前,請確保我們已登入。
import huggingface_hub
if "HF_USERNAME" not in os.environ or "HF_TOKEN" not in os.environ:
huggingface_hub.notebook_login()
如果 uri
的格式為 kaggle://<HF_USERNAME>/<MODEL>
,則可以使用 keras_hub.upload_preset(uri, preset_dir)
將模型上傳到 Hugging Face。
執行以下內容會將儲存在 preset_dir
中的模型上傳到 Hugging Face。
hf_username = huggingface_hub.whoami()["name"]
hf_uri = f"hf://{hf_username}/gpt2_imdb"
keras_hub.upload_preset(hf_uri, preset_dir)
在驗證模型已上傳到 Kaggle 之後,我們可以透過呼叫 from_preset
來載入模型。
causal_lm = keras_hub.models.CausalLM.from_preset(
f"kaggle://{kaggle_username}/gpt2/keras/gpt2_imdb"
)
我們也可以透過呼叫 from_preset
來載入上傳到 Hugging Face 的模型。
causal_lm = keras_hub.models.CausalLM.from_preset(f"hf://{hf_username}/gpt2_imdb")
上傳分類器模型與上傳因果語言模型 (Causal LM) 相似。若要上傳微調後的模型,首先,應使用 save_to_preset
API 將模型儲存到本機目錄,然後可以使用 keras_hub.upload_preset
上傳。
# Load the base model.
classifier = keras_hub.models.Classifier.from_preset(
"bert_tiny_en_uncased", num_classes=2
)
# Fine-tune the classifier.
classifier.fit(imdb_train)
# Save the model to a local preset directory.
preset_dir = "./bert_tiny_imdb"
classifier.save_to_preset(preset_dir)
# Upload to Kaggle.
keras_hub.upload_preset(
f"kaggle://{kaggle_username}/bert/keras/bert_tiny_imdb", preset_dir
)
100/100 ━━━━━━━━━━━━━━━━━━━━ 7 秒 31 毫秒/步 - 損失:0.6975 - 稀疏分類準確度:0.5164
Upload successful: preprocessor.json (947B)
Upload successful: tokenizer.json (461B)
Upload successful: task.json (2KB)
Upload successful: task.weights.h5 (50MB)
Upload successful: model.weights.h5 (17MB)
Upload successful: config.json (454B)
Upload successful: metadata.json (140B)
Upload successful: vocabulary.txt (226KB)
Your model instance version has been created.
在驗證模型已上傳到 Kaggle 之後,我們可以透過呼叫 from_preset
來載入模型。
classifier = keras_hub.models.Classifier.from_preset(
f"kaggle://{kaggle_username}/bert/keras/bert_tiny_imdb"
)