不得已而為之---CPU下使用gpt2-large模型進行微調訓練


1 引言

在之前的《GeotechSet模型的擴展和優化---集成了aitextgen》中訓練出GeotechSet,使用的是GPT2預訓練模型,由于機器只有6G GPU的限制,不能使用GPT2-Large。為了能使用這個模型,改用了CPU進行訓練。這個筆記簡要記錄了改進的過程。

2 GPT2和GPT2-large的差別

GPT2是在一個名為WebText的40GB數據集上訓練的,數據來源是從網上抓取的。GPT2系列共有 5個模型:distilgpt2-small,gpt2(gpt2-small),gpt2-medium,gpt2-large和gpt2-xl。目前我們只使用gpt2和gpt2-large這兩個模型。GPT2需要占用500MB的存儲空間來存儲其所有參數,而GPT2-large是GPT2的13倍,占用超過6.5GB的存儲空間。gpt2共有參數124439808個,gpt2-large共有參數774030080個,而gpt2-xl模型應該有大約1.5B的參數。

這個測試使用了如下代碼:

sum(p.numel() for p in gpt2_model.parameters() if p.requires_grad)


3 使用GPT2-large

在現有的條件下,為了使用GPT2-large, 必須在CPU下才能運行。為此新建了一個虛擬環境mwu-training,這個新的虛擬環境是從mwu-transformer克 隆過來的,然后在這個新的training環境中首先卸載CUDA,然后重新安裝torch的CPU版本,整個過程還算順利。

訓練設置與gpt2的訓練設置相同,仍然使用run_language_modeling.py,增大了下面參數的設置:

per_device_train_batch_size=8dataloader_num_workers=16block_size=256

訓練文本使用了401k的小數據集,運行參數如下:

Num examples = 403Num Epochs = 2Instantaneous batch size per device = 8Total train batch size (w. parallel, distributed & accumulation) = 8Gradient Accumulation steps = 1Total optimization steps = 102

CPU的占用率

不得已而為之---CPU下使用gpt2-large模型進行微調訓練的圖1

內存的占用率

不得已而為之---CPU下使用gpt2-large模型進行微調訓練的圖2

這個訓練共用了1小時26分鐘,生成的模型如下所示,大約3.1G。作為對比,同樣的數據在GPT2上訓練,產生的模型只有498M。有兩個原因導致了運行時間這么長,一個原因是使用了gpt2-large大模型,另一個原因是使用了CPU訓練,隨著訓練數據的增加,訓練時間還會更長。

不得已而為之---CPU下使用gpt2-large模型進行微調訓練的圖3

4 使用新模型

當新的模型建立后,轉到GPU環境下(mwu-transformer)運行geotech-gpt2-finetune.py,這樣做可能稍微快點兒。使用“step-path failure in a rock slope”作為引導句,生成的文本摘要總結如下(省略)。


5 結束語

這個筆記簡要記錄了在現有條件下使用CPU微調gpt2-large的過程,這是一個不得已而采用的方法,與GPT2的訓練結果相比,生成文本的質量好很多,缺點是訓練需要大量時間。另外,實踐證明XLNet模型《自回歸式語言XLNet模型的文本生成試驗》在文本生成方面的結果不如gpt2好,即使進行了微調,結果也強差人意,因此決定放棄XLNet在文本生成方面的應用。


登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP