2024-05-14|閱讀時間 ‧ 約 25 分鐘

SageMaker-讓自己的訓練上雲端

一.引言

  上回練習了一個官方示例,但其中對於一些細節沒有練習到的感覺,這次我們實際將之前練習的風格轉換訓練推上去看看,看是否能體驗到更多細節。

二.事前規劃

  既然現在需要使用自己的資料,就得好好規劃,這次希望將成本壓制在免費方案的條件下(或是最低限度),大致需要符合以下內容 :

  • 訓練資料及相關產出資料不能超出S3中的5G免費額度
  • 程式碼及訓練相關檔案不能超過筆記本實例的5G限額
  • 訓練時使用 ml.m5.xlarge 執行個體且不超過50小時
  • 筆記本不能開啟超過250小時(*記得確實停止才不會算時間)

  再來因為筆記本一開就會計時,所以這次將在本機端修改完再一次上傳到筆記本,考慮到只有5G,這次就選擇 Vocus-StyleTransfer-V1 來練習,第一版本的風格轉換只需要兩張圖,且訓練上也不會太久,這次修改大致規劃成下列模式 :

StyleTransferV1 ┬ TrainImg
| ├​ Content.jpg
|​ └ Style.jpg
├ Utils
| ├ __init__.py
| └ common.py
├ VGG19PreTrain
| └ vgg19.pth
├ ResultImg
└ Transform.py

三.實際操作

  首先先上傳這些檔案到筆記本內

  然後來處理啟動的部分,新增一個 Transform.ipynb,其中原本想要直接使用上傳到筆記本內的圖片,但嘗試後沒想到不行,只能透過S3容器,所以只能先將圖片先上傳到S3後,再指定對應路徑進行訓練。

import sagemaker
from sagemaker.pytorch import PyTorch

sagemaker_session = sagemaker.Session()
region = sagemaker_session.boto_region_name

bucket = sagemaker_session.default_bucket()
prefix = "sagemaker/StyleTransformV1"

role = sagemaker.get_execution_role()

style_path = 's3://S3-bucket-name/TrainImg/Style'
content_path = 's3://S3-bucket-name/TrainImg/Content'

estimator = PyTorch(
entry_point="Transform.py",
role=role,
py_version="py310",
framework_version="2.2.0",
instance_count=1,
instance_type="ml.m5.xlarge",
output_path="s3://S3-bucket-name/Result/",
hyperparameters={"num-steps": 150},
dependencies=['Utils','VGG19PreTrain']
)

estimator.fit({"content": content_path,
"style": style_path})

  並調整存圖從存本機改成上傳到S3

def save_image_to_s3(tensor, s3_bucket, s3_key):
# 將張量轉換為 PIL 圖片
image = tensor.cpu().clone()
image = image.squeeze(0)
image = unloader(image)

# 將圖片保存到內存中的 BytesIO 對象
buffer = io.BytesIO()
buffer.seek(0)

# 將圖片上傳到 S3
s3.upload_fileobj(buffer, s3_bucket, s3_key)

save_image_to_s3(model_output,'S3-bucket-name','Result/result.jpg')

  確認所有都沒問題後,即可使用Shift+Enter運行Transform.ipynb的整個區塊,S3儲存區便會產出結果圖,同樣相關程式碼於Github

四.結語

  本次成功將之前的程式碼推上 SageMaker 進行訓練,對於基本使用有了一定的了解,實際用下來雖然在存儲上有著一定的規定,但在環境及訓練上相對都相對簡單,並且使用上邏輯也足夠清晰,接下來下篇應該會繼續探討 SageMaker 提供的其他功能,讓我們下篇再見。

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.