開始
加載和管理數據
處理數據
政府
引用和資源
2023年7月18日更新
給我們反饋
本文描述了如何調整擁抱臉模型與擁抱變形金剛圖書館在一個GPU。它還包括Databricks-specific建議裝載MLflow Lakehouse和日誌記錄的數據模型,它允許您使用和管理您的模型在磚上。
變形金剛
擁抱的臉變形金剛圖書館提供了教練公用事業和汽車模型類,使加載和微調變壓器模型。
這些工具可用於以下任務和簡單的修改:
加載模型來調整。
構建擁抱臉變形金剛教練的配置實用程序。
在一個GPU執行培訓。
看到擁抱是什麼臉變形金剛?
一個單節點集群與一個GPU的司機。
磚的GPU版本運行時13.0毫升以上。
This example for fine-tuning requires the Transformers, Datasets, and Evaluate packages which are included in Databricks Runtime 13.0 ML and above.
MLflow 2.3。
數據準備和加載的微調與變壓器模型。
擁抱的臉變形金剛模型預計標記化的輸入,而不是下載的文本數據。以確保兼容性與基本模型,使用一個AutoTokenizer從基本模型加載。擁抱的臉數據集允許您直接申請記號賦予器不斷的訓練和測試數據。
數據集
例如:
從變形金剛進口AutoTokenizer分詞器=AutoTokenizer。from_pretrained(base_model)deftokenize_function(例子):返回分詞器(例子(“文本”),填充=假,截斷=真正的)train_test_tokenized=train_test_dataset。地圖(tokenize_function,批處理=真正的)
擁抱麵對訓練可以使用配置工具配置教練。教練類要求用戶提供:
指標
一個基本模型
一個培訓的配置
您可以配置評價指標除了違約損失規,教練計算。下麵的例子演示了添加精度作為一個指標:
損失
教練
精度
進口numpy作為np進口評估度規=評估。負載(“準確性”)defcompute_metrics(eval_pred):分對數,標簽=eval_pred預測=np。argmax(分對數,軸= -1)返回度規。計算(預測=預測,引用=標簽)
使用汽車為NLP模型類為你的任務加載適當的模型。
對於文本分類,使用AutoModelForSequenceClassification加載文本分類的基本模型。在創建模型,提供了類的數量和標簽映射中創建數據集的準備。
從變形金剛進口AutoModelForSequenceClassification模型=AutoModelForSequenceClassification。from_pretrained(base_model,num_labels=len(label2id),label2id=label2id,id2label=id2label)
接下來,創建培訓配置。的TrainingArguments類允許您指定輸出目錄,評價策略、學習速率等參數。
從變形金剛進口TrainingArguments,教練training_args=TrainingArguments(output_dir=training_output_dir,evaluation_strategy=“時代”)
使用一個數據排序器批量輸入訓練和評估數據集。DataCollatorWithPadding提供良好的基線文本分類的性能。
從變形金剛進口DataCollatorWithPaddingdata_collator=DataCollatorWithPadding(分詞器)
所有這些參數構建,您現在可以創建一個教練。
教練=教練(模型=模型,arg遊戲=training_args,train_dataset=train_test_dataset(“訓練”),eval_dataset=train_test_dataset(“測試”),compute_metrics=compute_metrics,data_collator=data_collator,)
擁抱臉接口MLflow和自動日誌指標在模型訓練使用MLflowCallback。但是,你必須自己日誌訓練模型。
包裝一個MLflow運行培訓。這個構造變形金剛管道從記號賦予器和訓練模型,並將其寫入本地磁盤。最後,日誌MLflow的模型mlflow.transformers.log_model。
從變形金剛進口管道與mlflow。start_run()作為運行:教練。火車()教練。save_model(model_output_dir)管=管道(“文本分類”,模型=AutoModelForSequenceClassification。from_pretrained(model_output_dir),batch_size=1,分詞器=分詞器)model_info=mlflow。變形金剛。log_model(transformers_model=管,artifact_path=“分類”,input_example=“大家好!”,)
如果你不需要創建一個管道,可以提交組件,用於訓練字典:
model_info=mlflow。變形金剛。log_model(transformers_model={“模型”:教練。模型,“記號賦予器”:分詞器},任務=“文本分類”,artifact_path=“text_classifier”,input_example=(“MLflow很棒!”,“MLflow磚是令人敬畏的!”),)
當你模型記錄和準備,加載模型推理一樣加載MLflow包裹pre-trained模型。
logged_model=”:/{run_id}/{model_artifact_path}”。格式(run_id=運行。信息。run_id,model_artifact_path=model_artifact_path)#負荷模型作為引發UDF。覆蓋result_type如果模型不返回值的兩倍。loaded_model_udf=mlflow。pyfunc。spark_udf(火花,model_uri=logged_model,result_type=“字符串”)測試=測試。選擇(測試。文本,測試。標簽,loaded_model_udf(測試。文本)。別名(“預測”))顯示(測試)
看到_為更多的信息。
本節描述常見的CUDA錯誤和指導如何解決它們。
當訓練大型模型,您可能遇到的一個常見的錯誤是CUDA內存錯誤。
例子:
OutOfMemoryError: CUDA的內存。試圖分配20.00 MiB (GPU 0;14.76鑲條總容量;666.34 MiB已經分配;17.75 MiB自由;總共720.00 MiB保留PyTorch)如果> >保留內存分配的內存設置max_split_size_mb避免碎片。為內存管理和PYTORCH_CUDA_ALLOC_CONF見文檔。
試試下麵的建議來解決這個錯誤:
減少批量大小進行訓練。你可以減少per_device_train_batch_size價值TrainingArguments。
per_device_train_batch_size
使用低精度訓練。你可以設置fp16 = True在TrainingArguments。
fp16 = True
使用gradient_accumulation_stepsTrainingArguments有效地提高整體批量大小。
使用8位亞當優化器。
清理GPU內存前培訓。有時,GPU內存可能被一些未使用的代碼。
從numba進口cuda設備=cuda。get_current_device()設備。重置()
跑步訓練時,你可能會得到CUDA內核錯誤。
CUDA內核錯誤可能是異步報道其他API調用,所以加亮下麵可能是不正確的。對於調試,考慮通過CUDA_LAUNCH_BLOCKING = 1。
故障診斷:
試著在CPU上運行的代碼是否錯誤是可再生的。
另一個選擇是通過設置得到更好的回溯CUDA_LAUNCH_BLOCKING = 1:
CUDA_LAUNCH_BLOCKING = 1
進口操作係統操作係統。環境(“CUDA_LAUNCH_BLOCKING”]=“1”
開始迅速與示例代碼,這個例子筆記本為微調模型提供了一個端到端的示例文本分類。本文的後續部分詳細使用擁抱的臉左右微調磚。
在新標簽頁打開筆記本
了解更多關於擁抱在磚。
擁抱是什麼臉變形金剛?
你可以用擁抱的臉變形金剛模型引發規模NLP批處理應用程序,看看使用擁抱臉變形金剛模型推理自然語言處理(NLP)。