共用方式為


準備用於微調 Hugging Face 模型的資料

本文示範如何使用擁抱臉部轉換器擁抱臉部數據集,準備您的數據以微調 開放原始碼 大型語言模型。

需求

從 Hugging Face 載入資料

Hugging Face Datasets 是一個 Hugging Face 程式庫,用於存取和共用音訊、電腦視覺和自然語言處理 (NLP) 工作的資料集。 使用 Hugging Face datasets,您可以從各種位置載入資料。 datasets 程式庫具有用於從 Hugging Face Hub 讀取資料集的公用程式。 您可以使用 load_dataset 函數,從 Hugging Face Hub 下載和讀取許多資料集。 若要深入了解使用 Hugging Face Datasets 載入資料,請參閱 Hugging Face 文件。

from datasets import load_dataset
dataset = load_dataset("imdb")

Hugging Face Hub 中的某些資料集提供了呼叫 load_dataset 時下載和產生的資料的大小。 在使用 load_dataset_builder 下載資料集之前,您可以使用 load_dataset 來了解大小。

from datasets import load_dataset_builder
from psutil._common import bytes2human

def print_dataset_size_if_provided(*args, **kwargs):
  dataset_builder = load_dataset_builder(*args, **kwargs)

  if dataset_builder.info.download_size and dataset_builder.info.dataset_size:
    print(f'download_size={bytes2human(dataset_builder.info.download_size)}, dataset_size={bytes2human(dataset_builder.info.dataset_size)}')
  else:
    print('Dataset size is not provided by uploader')

print_dataset_size_if_provided("imdb")

如需如何在 Azure Databricks 上為不同大小的資料下載和準備資料集的指引,請參閱從 Hugging Face 最佳做法筆記本下載資料集

格式化訓練和評估資料

若要使用您自己的資料進行模型微調,您必須先將訓練和評估資料格式化為 Spark DataFrame。 然後,使用 Hugging Face datasets 程式庫載入 DataFrame。

首先,將訓練資料格式化為符合訓練員預期的資料表。 對於文字分類,這是具有兩個資料行的資料表:文字資料行和標籤的資料行。

若要執行微調,您需要提供模型。 Hugging Face Transformer AutoClasses 程式庫可讓您輕鬆地載入模型和組態設定,包括用於自然語言處理的各種 Auto Models

例如,Hugging Face transformers 提供 AutoModelForSequenceClassification 作為文字分類的模型載入器,它要求提供整數識別碼作為類別標籤。 但是,如果您具有帶字串標籤的 DataFrame,則還必須在建立模型時指定整數標籤與字串標籤之間的對應。 您可以收集此資訊,如下所示:

labels = df.select(df.label).groupBy(df.label).count().collect()
id2label = {index: row.label for (index, row) in enumerate(labels)}
label2id = {row.label: index for (index, row) in enumerate(labels)}

然後,使用 Pandas UDF 建立整數識別碼作為標籤資料行:

from pyspark.sql.functions import pandas_udf
import pandas as pd
@pandas_udf('integer')
def replace_labels_with_ids(labels: pd.Series) -> pd.Series:
  return labels.apply(lambda x: label2id[x])

df_id_labels = df.select(replace_labels_with_ids(df.label).alias('label'), df.text)

從 Spark DataFrame 載入 Hugging Face 資料集

Hugging Face datasets 支援使用 datasets.Dataset.from_spark 從 Spark DataFrame 載入。 請參閱 Hugging Face 文件,以深入了解 from_spark() 方法。

例如,如果您具有 train_dftest_df DataFrame,可以使用下列程式碼為每個 DataFrame 建立資料集:

import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/dbfs/cache/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/dbfs/cache/test")

Dataset.from_spark 快取資料集。 此範例描述驅動程式上的模型訓練,因此必須向驅動程式提供資料。 此外,由於快取具體化是使用 Spark 平行處理的,因此,提供的 cache_dir 必須可供所有背景工作角色存取。 若要滿足這些條件約束,cache_dir 應是 Databricks 檔案系統 (DBFS) 根磁碟區掛接點

DBFS 根磁碟區可供工作區的所有使用者存取,但只能用於沒有存取限制的資料。 如果您的資料需要存取控制,請使用掛接點,而不是 DBFS 根目錄。

如果您的資料集很大,將其寫入 DBFS 可能需要很長時間。 若要加速程序,您可以使用 working_dir 參數讓 Hugging Face datasets 將資料集寫入磁碟上的暫存位置,然後將其移至 DBFS。 例如,若要使用 SSD 作為暫存位置,請執行以下操作:

import datasets
dataset = datasets.Dataset.from_spark(
  train_df,
  cache_dir="/dbfs/cache/train",
  working_dir="/local_disk0/tmp/train",
)

資料集的快取

快取是 datasets 提高效率的方法之一。 快取會儲存所有已下載和已處理的資料集,因此,當使用者需要使用中繼資料集時,系統會直接從快取中重新載入這些資料集。

資料集的預設快取目錄為 ~/.cache/huggingface/datasets。 當叢集終止時,快取資料也會遺失。 若要在叢集終止時保存快取檔案,Databricks 建議透過設定環境變數 HF_DATASETS_CACHE 將快取位置變更為 DBFS:

import os
os.environ["HF_DATASETS_CACHE"] = "/dbfs/place/you/want/to/save"

微調模型

當資料準備就緒時,您可以使用它來微調 Hugging Face 模型

筆記本:從 Hugging Face 下載資料集

此範例筆記本提供使用 Hugging Face load_dataset 函數在 Azure Databricks 中為不同大小的資料下載和準備資料集的建議最佳做法。

從 Hugging Face 下載資料集最佳做法筆記本

取得筆記本