Platform for AI (PAI) için Python SDK, makine öğrenimi eğitim işlerini cloud ortamına göndermek ve çalıştırmak amacıyla yüksek düzeyli bir Estimator API'si sağlar.
Faturalama
Eğitim işleri Deep Learning Containers (DLC) kaynakları üzerinde çalışır. Kullanılan kaynaklara göre ücretlendirme uygulanır. Ayrıntılar için bkz. DLC faturalandırması.
Çalışma mekanizması
Bir eğitim işi göndermek iki adımdan oluşur:
İşi yapılandırmak (başlatma komutu, kaynak kodu, konteyner görüntüsü, örnek türü ve hiperparametreler) için bir
Estimatorörneği oluşturun.Giriş verilerini belirtmek ve işi göndermek için
Estimator.fit()yöntemini çağırın.
from pai.estimator import Estimator
est = Estimator(
command="<LaunchCommand>",
source_dir="<SourceCodeDirectory>",
image_uri="<TrainingImageUri>",
instance_type="<TrainingInstanceType>",
hyperparameters={
"n_estimators": 500,
"max_depth": 5,
},
)
est.fit(
inputs={
"train_data": "oss://<YourOssBucket>/path/to/train/data/",
}
)
# Get the OSS path of the output model.
print(est.model_data())
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Yüklenmiş PAI SDK for Python
Eğitim verilerini ve model çıktısını depolamak için bir Object Storage Service (OSS) paketi
(İsteğe bağlı) İşleri hata ayıklama amacıyla yerel olarak çalıştırmayı planlıyorsanız Docker Desktop yüklü olmalıdır
Bir eğitim işi gönderin
Adım 1: Eğitim betiğinizi hazırlayın
Eğitim betiğinizi yerel olarak yazın. PAI, cloud ortamını hazırlar ve betiği çalıştırır. Betiğiniz PAI çalışma zamanıyla entegre olmak için aşağıdaki kurallara uymalıdır.
Eğitim konteynerinde kullanılabilen ortam değişkenleri
PAI, her eğitim konteynerine aşağıdaki ortam değişkenlerini enjekte eder. Bu değişkenlere eğitim betiğinizde veya başlatma komutunda başvurabilirsiniz.
| Değişken | Açıklama | Varsayılan yol |
|---|---|---|
PAI_CONFIG_DIR |
hyperparameters.json ve diğer iş yapılandırma dosyalarını içeren dizin |
/ml/input/config/ |
PAI_WORKING_DIR |
Kod dosyalarınızın bağlandığı dizin | /ml/usercode/ |
PAI_INPUT_{CHANNEL_NAME} |
Adlandırılmış kanal için giriş verilerinin bağlama yolu | /ml/input/data/{channel_name}/ |
PAI_OUTPUT_MODEL |
Çıktı modelinin kaydedildiği yol — PAI, iş tamamlandıktan sonra içeriği OSS'e yükler | /ml/output/model/ |
PAI_OUTPUT_CHECKPOINTS |
Kontrol noktalarının kaydedildiği yol — PAI, iş tamamlandıktan sonra içeriği OSS'e yükler | /ml/output/checkpoints/ |
PAI_HPS_{HYPERPARAMETER_NAME} |
Tek bir hiperparametrenin değeri. Ortam değişkenleri yalnızca harf, rakam ve alt çizgi (_) içerebilir. Hiperparametre adındaki diğer karakterler _ ile değiştirilir. |
PAI_HPS_EPOCHS=10 |
PAI_USER_ARGS |
Komut satırı bağımsız değişkeni olarak kullanılmaya hazır, --{name} {value} biçiminde biçimlendirilmiş tüm hiperparametreler |
PAI_USER_ARGS="--epochs 10 --batch-size 32" |
PAI_HPS |
JSON dizesi olarak tüm hiperparametreler | PAI_HPS={"epochs": 10, "batch-size": 32} |
Hiperparametreleri yükleme
Estimator üzerinde hyperparameters değerlerini ayarladığınızda, PAI bu değerleri {PAI_CONFIG_DIR}/hyperparameters.json dosyasına yazar (varsayılan yol: /ml/input/config/hyperparameters.json).
Hiperparametreleri bu dosyadan okuyun:
import json
import os
def load_hyperparameters():
hps_path = os.path.join(os.environ["PAI_CONFIG_DIR"], "hyperparameters.json")
with open(hps_path) as f:
return json.load(f)
Örneğin, hyperparameters={"batch_size": 32, "learning_rate": 0.01} şu çıktıyı üretir:
{
"batch_size": "32",
"learning-rate": "0.01"
}
Alternatif olarak, tüm hiperparametreleri betiğinize komut satırı bağımsız değişkenleri olarak iletmek için PAI_USER_ARGS kullanabilirsiniz:
est = Estimator(
command="python train.py $PAI_USER_ARGS",
hyperparameters={
"epochs": 10,
"batch-size": 32,
"learning-rate": 0.001,
},
# ...
)
Bunları eğitim betiğinde argparse kullanarak ayrıştırın.
hyperparameters={"epochs": 10, "batch-size": 32, "train.learning_rate": 0.001} için PAI şunları oluşturur:
PAI_HPS_EPOCHS=10
PAI_HPS_BATCH_SIZE=32
PAI_HPS_TRAIN_LEARNING_RATE=0.001
Giriş verilerini yükleme
Giriş verilerini Estimator.fit() yönteminin inputs parametresi aracılığıyla iletin. Her girdi, anahtarın kanal adı olduğu ve değerin bir OSS veya File Storage NAS (NAS) yolu olduğu bir anahtar-değer çiftidir:
est.fit(
inputs={
"train": "oss://<YourOssBucket>/train/data/train.csv",
"test": "oss://<YourOssBucket>/test/data/",
}
)
PAI, verileri /ml/input/data/{channel_name}/ konumuna bağlar. Bağlama yolunu PAI_INPUT_{CHANNEL_NAME} kullanarak okuyun:
train_data = os.environ["PAI_INPUT_TRAIN"] # /ml/input/data/train/
test_data = os.environ["PAI_INPUT_TEST"] # /ml/input/data/test/
OSS yolu / ile bitiyorsa ortam değişkeni bir dizine işaret eder. Bir dosya adı ile bitiyorsa o dosyaya işaret eder.
Çıktı modelini kaydetme
Eğitilen modeli PAI_OUTPUT_MODEL tarafından belirtilen yola kaydedin (varsayılan: /ml/output/model/). PAI, buraya yazılan her şeyi otomatik olarak OSS'e yükler.
import os
def save_model(model, model_dir=None):
if model_dir is None:
model_dir = os.environ["PAI_OUTPUT_MODEL"]
# Write your model files to model_dir.
# Example: torch.save(model.state_dict(), os.path.join(model_dir, "model.pth"))
Tam betik örneği
import json
import os
def load_hyperparameters():
hps_path = os.path.join(os.environ["PAI_CONFIG_DIR"], "hyperparameters.json")
with open(hps_path) as f:
return json.load(f)
def train(hps, train_data, test_data):
"""Add your model training code here."""
pass
def save_model(model):
output_path = os.environ["PAI_OUTPUT_MODEL"]
# Write the model to output_path.
pass
def run():
# 1. Load hyperparameters.
hps = load_hyperparameters()
# 2. Load input data from mounted paths.
train_data = os.environ["PAI_INPUT_TRAIN"]
test_data = os.environ["PAI_INPUT_TEST"]
model = train(hps, train_data, test_data)
# 3. Save the output model.
save_model(model)
if __name__ == "__main__":
run()
Üçüncü taraf bağımlılıkları ekleme
Betiğiniz eğitim görüntüsünde bulunmayan Python paketlerine ihtiyaç duyuyorsa, betiğinizle aynı dizine bir requirements.txt dosyası ekleyin. PAI, betiği çalıştırmadan önce listelenen paketleri yükler.
Kod dizininizi aşağıdaki gibi düzenleyin:
train_src/
├── requirements.txt # Third-party dependencies
├── train.py # Entry point; run with: python train.py
└── utils.py
Bu dizini paketleyip PAI'e yüklemek için Estimator üzerinde source_dir="train_src" ayarlayın.
Adım 2: Bir eğitim görüntüsü seçin
Çerçevenizi ve kitaplık bağımlılıklarınızı içeren bir konteyner görüntüsü belirtin. PAI önceden oluşturulmuş bir görüntü veya Container Registry (ACR) üzerinden özel bir görüntü kullanabilirsiniz.
PAI önceden oluşturulmuş bir görüntü kullanma
from pai.image import retrieve, list_images, ImageScope
# List all PAI images for PyTorch.
for image_info in list_images(framework_name="PyTorch"):
print(image_info)
# Get the TensorFlow 2.3 image for CPU training.
tf_image = retrieve(framework_name="TensorFlow", framework_version="2.3")
# Get the latest TensorFlow image for GPU training.
tf_gpu_image = retrieve(
framework_name="TensorFlow",
framework_version="latest",
accelerator_type="GPU",
)
# Get the PyTorch 1.12 image for GPU training.
torch_gpu_image = retrieve(framework_name="PyTorch", framework_version="1.12",
accelerator_type="GPU")
PAI görüntülerinde önceden yüklenen üçüncü taraf kitaplıkların listesi için bkz. Genel görüntüler .
Adım 3: İşi gönderin
Bir Estimator örneği oluşturun ve işi göndermek için fit() yöntemini çağırın. Gönderimden sonra PAI, iş ayrıntıları sayfasının URL'sini yazdırır ve iş başarılı olana, başarısız olana veya durdurulana kadar günlükleri akar.
from pai.estimator import Estimator
from pai.image import retrieve
torch_image_uri = retrieve("PyTorch", framework_version="1.12").image_uri
est = Estimator(
command="python train.py",
source_dir="./train_src/",
image_uri=torch_image_uri,
instance_type="ecs.c6.large",
hyperparameters={
"n_estimators": 500,
"objective": "reg:squarederror",
"max_depth": 5,
},
base_job_name="example_train_job",
)
est.fit()
# Get the OSS path of the output model.
print(est.model_data())
Temel parametreler:
command— PAI'in konteyner içinde çalıştırdığı başlatma komutu (örneğin,python train.py).source_dir— Eğitim betiğinizi ve bağımlılıklarınızı içeren yerel dizin. PAI, içeriğini paketler ve yükler. Ayrıca bir TAR arşivine yönelik bir OSS yolu da kabul eder (örneğin,oss://<YourOssBucket>/source.tar.gz). Bu dizinderequirements.txtdosyası varsa bağımlılıklar iş çalışmadan önce otomatik olarak yüklenir.image_uri— Konteyner görüntüsü URI'si. Bir PAI önceden oluşturulmuş görüntü URI'si almak içinretrieve()kullanın veya özel bir ACR görüntü URI'si sağlayın.instance_type— Eğitim için kullanılan ECS örnek türü (örneğin,ecs.c6.large).hyperparameters— Eğitim betiğine aktarılan anahtar-değer çiftleri. Değerlerhyperparameters.jsondosyasına yazılır ve ayrıca ortam değişkenleri olarak sunulur.base_job_name— İş adı için ön ek. Tam ad{base_job_name}_{submitted-datetime}biçimini izler.
fit() döndürdükten sonra, kaydedilen modelin OSS yolunu almak için est.model_data() yöntemini çağırın.
Yerel olarak hata ayıklama
Cloud ortamında hata ayıklama yavaş olabilir. instance_type="local" ayarını yaparak bir eğitim işini yerel olarak çalıştırın ve hata ayıklayın. İş yerel bir Docker konteynerinde çalışır.
est = Estimator(
command="python train.py",
source_dir="./train_src/",
image_uri=torch_image_uri,
instance_type="local",
)
est.fit(
inputs={
# OSS data is downloaded and mounted into the container.
"train": "oss://<BucketName>/path-to-data/",
# Local paths are mounted directly.
"test": "/data/to/test/data",
}
)
print(est.model_data())
Dizin yapısı
Aşağıda, bir PAI eğitim konteynerinin içindeki tam dizin düzeni gösterilmektedir:
/ml
├── usercode/ # Your code files (PAI_WORKING_DIR)
│ ├── requirements.txt
│ └── train.py
├── input/
│ ├── config/ # Job configuration (PAI_CONFIG_DIR)
│ │ └── hyperparameters.json
│ └── data/ # Input channels
│ ├── train/
│ │ └── train.csv
│ └── test/
│ └── test.csv
└── output/ # Output channels
├── model/ # PAI_OUTPUT_MODEL
└── checkpoints/ # PAI_OUTPUT_CHECKPOINTS