إعداد البيانات لضبط نماذج Hugging Face بدقة

توضح هذه المقالة كيفية إعداد بياناتك لضبط مصدر مفتوح نماذج اللغات الكبيرة باستخدام Hugging Face Transformers و Hugging Face Datasets.

المتطلبات

تحميل البيانات من Hugging Face

معانقة Face Datasets هي مكتبة Hugging Face للوصول إلى مجموعات البيانات ومشاركتها لمهام الصوت والرؤية الحاسوبية ومعالجة اللغة الطبيعية (NLP). مع عناق الوجه datasets يمكنك تحميل البيانات من أماكن مختلفة. تحتوي datasets المكتبة على أدوات مساعدة لقراءة مجموعات البيانات من Hugging Face Hub. هناك العديد من مجموعات البيانات القابلة للتنزيل والقراءة من Hugging Face Hub باستخدام الدالة load_dataset . تعرف على المزيد حول تحميل البيانات باستخدام 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")

راجع دفتر ملاحظات تنزيل مجموعات البيانات من أفضل ممارسات Hugging Face للحصول على إرشادات حول كيفية تنزيل مجموعات البيانات وإعدادها على Azure Databricks لأحجام مختلفة من البيانات.

تنسيق بيانات التدريب والتقييم

لاستخدام بياناتك الخاصة لضبط النموذج، يجب أولا تنسيق بيانات التدريب والتقييم في Spark DataFrames. ثم قم بتحميل DataFrames باستخدام مكتبة Hugging Face datasets .

ابدأ بتنسيق بيانات التدريب الخاصة بك في جدول تلبية توقعات المدرب. بالنسبة لتصنيف النص، هذا جدول يحتوي على عمودين: عمود نص وعمود من التسميات.

لإجراء ضبط دقيق، تحتاج إلى توفير نموذج. تسهل مكتبة Hugging Face Transformer AutoClasses تحميل النماذج وإعدادات التكوين، بما في ذلك مجموعة واسعة من Auto Models لمعالجة اللغة الطبيعية.

على سبيل المثال، يوفر AutoModelForSequenceClassification Hugging Face transformers كمحمل نموذج لتصنيف النص، والذي يتوقع معرفات عدد صحيح كتسميات الفئة. ومع ذلك، إذا كان لديك 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)

تحميل مجموعة بيانات Face عناق من Spark DataFrame

يدعم Hugging Face datasets التحميل من Spark DataFrames باستخدام datasets.Dataset.from_spark. راجع وثائق Hugging Face لمعرفة المزيد حول أسلوب from_spark().

على سبيل المثال، إذا كان لديك train_df و test_df DataFrames، يمكنك إنشاء مجموعات بيانات لكل منها باستخدام التعليمات البرمجية التالية:

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 بتغيير موقع ذاكرة التخزين المؤقت إلى DBFS عن طريق تعيين متغير HF_DATASETS_CACHEالبيئة :

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

الحصول على دفتر الملاحظات