Hugging Face modelleri için ince ayar verilerini hazırlama

Bu makale, verilerinizi açık kaynak büyük dil modellerinin hassas ayarlamaları için Hugging Face Transformers ve Hugging Face Datasets ile nasıl hazırlayacağınızı göstermektedir.

Gereksinimler

  • Makine Öğrenimi için Databricks Runtime 13.0 veya üzeri. Bu kılavuzdaki örneklerde Hugging Face veri kümeleri, Databricks Runtime 13.0 ML ve üzeri sürümlerine dahil edilmiştir.
  • Unity Kataloğu'nu etkinleştirmiş bir çalışma alanı. Unity Kataloğu birimine veri yazmak için aşağıdaki izinlere de sahip olmanız gerekir:
    • Dosyaları karşıya yüklemek istediğiniz birimdeki WRITE VOLUME ayrıcalığı.
    • Ana şemada USE SCHEMA ayrıcalığı.
    • Ana katalogdaki USE CATALOG ayrıcalığı.
  • Büyük veri kümelerini indirmek için önemli işlem kaynakları. Sağlanan örnek not defterinde kullanılan büyük veri kümesinin indirilmesi bir günden fazla sürer.

Hugging Face'ten veri yükleme

Hugging Face Datasets, ses, bilgisayarla görme ve doğal dil işleme (NLP) görevleri için veri kümelerine erişim ve paylaşım sağlamak amacıyla kullanılan bir Hugging Face kütüphanesidir. Hugging Face datasets ile çeşitli yerlerden veri yükleyebilirsiniz. Hugging Face Hub'dan datasets veri kümelerini okumak için kütüphanede çeşitli araçlar bulunur. load_dataset işlevini kullanarak Hugging Face Hub'ından indirilebilen ve okunabilen birçok veri seti bulunmaktadır. Hugging Face Veri Kümeleri ile veri yükleme hakkında daha fazla bilgi edinmek için Hugging Face belgelerini inceleyin.

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

Hugging Face Hub'ındaki bazı veri kümeleri, load_dataset çağrıldığında indirilen ve oluşturulan verilerin boyutlarını sağlar. load_dataset_builder'yi, load_dataset ile veri kümesini indirmeden önce boyutları öğrenmek için kullanabilirsiniz.

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 üzerinde farklı veri boyutları için veri kümelerini nasıl indireceğiniz ve hazırlayacağınız konusunda rehberlik almak üzere Hugging Face en iyi uygulamalar not defterinden Veri kümelerini indirme kısmına bakın.

Eğitim ve değerlendirme verilerinizi biçimlendirme

Model ince ayarı için kendi verilerinizi kullanmak için önce eğitim ve değerlendirme verilerinizi Spark DataFrame'lere biçimlendirmeniz gerekir. Ardından, Hugging Face datasets kitaplığını kullanarak DataFrame'leri yükleyin.

Eğitim verilerinizi eğitmenin beklentilerini karşılayan bir tablo halinde biçimlendirerek başlayın. Metin sınıflandırması için bu, iki sütunu olan bir tablodur: metin sütunu ve etiket sütunu.

hassas ayarlamalar yapmak için bir model sağlamanız gerekir. Hugging Face Transformer AutoClasses kitaplığı, modelleri ve yapılandırma ayarlarını yüklemeyi kolaylaştırır, doğal dil işleme için geniş bir Auto Models yelpazesi dahil olmak üzere.

Örneğin, Hugging Face transformers metin sınıflandırması için bir model yükleyici AutoModelForSequenceClassification sağlar ve bu da kategori etiketleri olarak tamsayı kimliklerini bekler. Ancak, dize etiketleri içeren bir DataFrame'iniz varsa, modeli oluştururken tamsayı etiketleri ve dize etiketleri arasında eşlemeler de belirtmeniz gerekir. Bu bilgileri aşağıdaki gibi toplayabilirsiniz:

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

Ardından, Pandas UDF ile etiket sütunu olarak tamsayı kimliklerini oluşturun:

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'den Hugging Face veri kümesi yükleme

Hugging Face datasets kullanarak Spark DataFrame'lerden yüklemeyi destekler. from_spark() metodu hakkında daha fazla bilgi edinmek için Hugging Face belgelerine bakabilirsiniz.

Örneğin, eğer train_df ve test_df DataFrame'leriniz varsa, aşağıdaki kodla bunlar için veri kümeleri oluşturabilirsiniz.

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 veri kümesini önbelleğe alır. Bu örnekte sürücüdeki model eğitimi açıklanır, bu nedenle verilerin sürücüde kullanılabilir hale getirilmesi gerekir. Ayrıca, önbellek somutlaştırma Spark kullanılarak paralelleştirildiğinden, verilen cache_dir tüm işçiler tarafından erişilebilir olmalıdır. Bu kısıtlamaları karşılamak için cache_dir, Unity Kataloğu birim yoluolmalıdır.

Birime erişim Unity Kataloğukullanılarak yönetilebilir.

Veri kümeniz büyükse Unity Kataloğu'na yazmak uzun sürebilir. İşlemi hızlandırmak için working_dir parametresini kullanarak Hugging Face datasets verisetini diskte geçici bir konuma yazabilir, ardından Unity Catalog'a taşıyabilirsiniz. Örneğin, SSD'yi geçici bir konum olarak kullanmak için:

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

Veri kümeleri için önbelleğe alma

Önbellek, verimliliği artırmanın yollarından datasets biridir. Kullanıcının ara veri kümelerini kullanması gerektiğinde doğrudan önbellekten yeniden yüklenmesi için indirilen ve işlenen tüm veri kümelerini depolar.

Veri kümelerinin varsayılan önbellek dizinidir ~/.cache/huggingface/datasets. Bir küme sonlandırıldığında önbellek verileri de kaybolur. Databricks, önbellek dosyasını küme sonlandırmada kalıcı hale getirmek için ortam değişkenini HF_DATASETS_CACHEayarlayarak önbellek konumunun Unity Kataloğu birim yolu olarak değiştirilmesini önerir:

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

Modelde ince ayar yapma

Verileriniz hazır olduğunda, hugging face modeline ince ayar yapmak için kullanabilirsiniz.

Not Defteri: YüzLeri Kucaklama'dan veri kümelerini indirme

Bu örnek not defteri, Azure Databricks'te farklı veri boyutlarına yönelik veri kümelerini indirmek ve hazırlamak için Yüz Tanıma load_dataset özelliğini kullanmaya yönelik önerilen en iyi yöntemleri sağlar.

Hugging Face en iyi uygulamalar not defterinden veri kümelerini indirme

Not defterini alma