Menyiapkan data untuk menyempurnakan model Hugging Face

Artikel ini menunjukkan cara menyiapkan data Anda untuk penyetelan lanjutan model bahasa besar sumber terbuka dengan Hugging Face Transformers dan Hugging Face Datasets.

Persyaratan

  • Databricks Runtime untuk Pembelajaran Mesin 13.0 atau lebih tinggi. Contoh dalam panduan ini menggunakan himpunan data Hugging Face yang disertakan dalam Databricks Runtime 13.0 ML ke atas.
  • Ruang kerja yang telah mengaktifkan Katalog Unity. Anda juga harus memiliki izin berikut untuk menulis data ke volume Katalog Unity:
    • Hak akses WRITE VOLUME pada volume yang ingin Anda gunakan untuk mengunggah file.
    • Hak istimewa USE SCHEMA pada skema induk.
    • Privileg USE CATALOG pada katalog induk.
  • Sumber daya komputasi yang signifikan untuk mengunduh himpunan data besar. Himpunan data besar yang digunakan dalam contoh notebook yang disediakan membutuhkan waktu lebih dari satu hari untuk diunduh.

Memuat data dari Hugging Face

Hugging Face Datasets adalah pustaka Hugging Face untuk mengakses dan berbagi dataset untuk tugas audio, penglihatan komputer, dan pemrosesan bahasa alami (NLP). Dengan Hugging Face datasets , Anda dapat memuat data dari berbagai tempat. Pustaka datasets memiliki utilitas untuk membaca himpunan data dari Hugging Face Hub. Ada banyak himpunan data yang dapat diunduh dan dapat dibaca dari Hugging Face Hub dengan menggunakan fungsi .load_dataset Pelajari selengkapnya tentang memuat data dengan Hugging Face Datasets di dokumentasi Hugging Face.

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

Beberapa himpunan data di Hugging Face Hub menyediakan ukuran data yang diunduh dan dihasilkan saat load_dataset dipanggil. Anda dapat menggunakan load_dataset_builder untuk mengetahui ukuran sebelum mengunduh himpunan data dengan 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")

Lihat notebook Praktik Terbaik Hugging Face tentang Mengunduh Himpunan Data untuk panduan cara mengunduh dan menyiapkan himpunan data di Azure Databricks untuk berbagai ukuran data.

Memformat data pelatihan dan evaluasi Anda

Untuk menggunakan data Anda sendiri untuk penyempurnaan model, Anda harus terlebih dahulu memformat data pelatihan dan evaluasi Anda ke dalam Spark DataFrames. Kemudian, muat DataFrames menggunakan pustaka Hugging Face datasets.

Mulailah dengan memformat data pelatihan Anda ke dalam tabel yang memenuhi harapan pelatih. Untuk klasifikasi teks, ini adalah tabel dengan dua kolom: kolom teks dan kolom label.

Untuk melakukan penyempurnaan, Anda perlu menyediakan model. Pustaka Transformer Hugging Face AutoClasses memudahkan pemuatan model dan pengaturan konfigurasi, termasuk beragam Auto Models fitur untuk pemrosesan bahasa alami.

Misalnya, Hugging Face transformers menyediakan AutoModelForSequenceClassification sebagai pemuat model untuk klasifikasi teks, yang mengharapkan ID bilangan bulat sebagai label kategori. Namun, jika Anda memiliki DataFrame dengan label string, Anda juga harus menentukan pemetaan antara label bilangan bulat dan label string saat membuat model. Anda dapat mengumpulkan informasi ini sebagai berikut:

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)}

Kemudian, buat ID bilangan bulat sebagai kolom label dengan 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)

Memuat himpunan data Hugging Face dari Spark DataFrame

Hugging Face datasets mendukung pemuatan dari Spark DataFrames menggunakan datasets.Dataset.from_spark. Lihat dokumentasi Hugging Face untuk mempelajari selengkapnya tentang metode from_spark().

Misalnya, jika Anda memiliki train_df dan test_df DataFrames, Anda dapat membuat himpunan data untuk masing-masing dengan kode berikut:

import datasets
train_dataset = datasets.Dataset.from_spark(train_df, cache_dir="/Volumes/main/default/my-volume/train")
test_dataset = datasets.Dataset.from_spark(test_df, cache_dir="/Volumes/main/default/my-volume/test")

Dataset.from_spark menyimpan set data dalam cache. Contoh ini menjelaskan pelatihan model pada driver, dan data harus tersedia untuknya. Selain itu, karena realiasi cache dilakukan secara paralel menggunakan Spark, cache_dir yang disediakan harus dapat diakses oleh semua worker. Untuk memenuhi batasan ini, cache_dir harus menjadi jalur volume Unity Catalog.

Akses ke volume dapat dikelola menggunakan Unity Catalog.

Jika himpunan data Anda besar, menulisnya ke Unity Catalog dapat memakan waktu lama. Untuk mempercepat proses, Anda dapat menggunakan parameter working_dir agar Hugging Face datasets menulis himpunan data ke lokasi sementara pada disk, lalu memindahkannya ke Katalog Unity. Misalnya, untuk menggunakan SSD sebagai lokasi sementara:

import datasets
dataset = datasets.Dataset.from_spark(
  train_df,
  cache_dir="/Volumes/main/default/my-volume/train",
  working_dir="/local_disk0/tmp/train",
)

Penyimpanan cache untuk himpunan data

Cache adalah salah satu cara datasets meningkatkan efisiensi. Ini menyimpan semua himpunan data yang diunduh dan diproses sehingga ketika pengguna perlu menggunakan himpunan data perantara, mereka dimuat ulang langsung dari cache.

Direktori cache default himpunan data adalah ~/.cache/huggingface/datasets. Ketika kluster dihentikan, data cache juga hilang. Untuk mempertahankan file cache pada penghentian kluster, Databricks merekomendasikan untuk mengubah lokasi cache ke jalur volume Katalog Unity dengan mengatur variabel lingkungan HF_DATASETS_CACHE:

import os
os.environ["HF_DATASETS_CACHE"] = "/Volumes/main/default/my-volume/"

Menyempurnakan model.

Saat data Anda siap, Anda dapat menggunakannya untuk menyempurnakan model Hugging Face.

Notebook: Mengunduh himpunan data dari Hugging Face

Contoh notebook ini menyediakan praktik terbaik yang direkomendasikan untuk menggunakan fungsi Hugging Face load_dataset untuk mengunduh dan menyiapkan himpunan data di Azure Databricks untuk berbagai ukuran data.

Mengunduh himpunan data dari buku catatan praktik terbaik Hugging Face

Dapatkan buku catatan