Hugging Face 모델을 미세 조정하기 위한 데이터 준비
이 문서에서는 Hugging Face 변환기 및 Hugging Face 데이터 세트를 사용하여 오픈 소스 큰 언어 모델을 미세 조정하기 위해 데이터를 준비하는 방법을 보여줍니다.
요구 사항
- Machine Learning용 Databricks Runtime 13.0 이상 이 가이드의 예제에서는 Databricks Runtime 13.0 ML 이상에 포함된 Hugging Face 데이터 세트를 사용합니다.
Hugging Face에서 데이터 로드
Hugging Face 데이터 세트는 오디오, 컴퓨터 비전 및 NLP(자연어 처리) 작업에 대한 데이터 세트에 액세스하고 공유하기 위한 Hugging Face 라이브러리입니다. Hugging Face datasets
을 사용하면 다양한 장소에서 데이터를 로드 할 수 있습니다. datasets
라이브러리에는 Hugging Face Hub에서 데이터 세트를 읽는 유틸리티가 있습니다. load_dataset
함수를 사용하여 Hugging Face Hub에서 다운로드하고 읽을 수 있는 많은 데이터 세트가 있습니다. Hugging Face 설명서에서 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 모범 사례 Notebook의 데이터 세트 다운로드를 참조하세요.
학습 및 평가 데이터 형식 지정
모델 미세 조정에 고유한 데이터를 사용하려면 먼저 학습 및 평가 데이터의 형식을 Spark DataFrames로 지정해야 합니다. 그런 다음, Hugging Face datasets
라이브러리를 사용하여 데이터 프레임을 로드합니다.
먼저 학습 데이터를 트레이너의 기대치를 충족하는 테이블로 서식을 지정합니다. 텍스트 분류의 경우 텍스트 열과 레이블 열이라는 두 개의 열이 있는 테이블입니다.
미세 조정을 수행하려면 모델을 제공해야 합니다. Hugging Face Transformer AutoClasses 라이브러리를 사용하면 자연어 처리를 위한 다양한 범위의 Auto Models
을 포함하여 모델 및 구성 설정을 쉽게 로드할 수 있습니다.
예를 들어 Hugging Face transformers
은 정수 ID를 범주 레이블로 예상하는 텍스트 분류를 위한 모델 로더로 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를 사용하여 정수 ID를 레이블 열로 만듭니다.
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 DataFrames에서 로드를 지원합니다. from_spark() 메서드에 대한 자세한 내용은 Hugging Face 설명서를 참조하세요.
예를 들어 train_df
및 test_df
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
은 DBFS(Databricks 파일 시스템) 루트 볼륨 또는 탑재 지점이어야 합니다.
DBFS 루트 볼륨은 작업 영역의 모든 사용자가 액세스할 수 있으며 액세스 제한 없이 데이터에만 사용해야 합니다. 데이터에 액세스 제어가 필요한 경우 DBFS 루트 대신 탑재 지점을 사용합니다.
데이터 세트가 큰 경우 DBFS에 쓰는 데 시간이 오래 걸릴 수 있습니다. 프로세스 속도를 높이기 위해 datasets
매개 변수를 사용하여 Hugging Face working_dir
가 디스크의 임시 위치에 데이터 세트를 쓴 다음 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 모델을 미세 조정할 수 있습니다.
Notebook: Hugging Face에서 데이터 세트 다운로드
이 예제 Notebook은 Hugging Face load_dataset
함수를 사용하여 다양한 크기의 데이터에 대한 Azure Databricks의 데이터 세트를 다운로드하고 준비하는 데 권장되는 모범 사례를 제공합니다.