Pelatihan model pada komputasi tanpa server

BERLAKU UNTUK:Ekstensi ml Azure CLI v2 (saat ini)Python SDK azure-ai-ml v2 (saat ini)

Anda tidak perlu membuat dan mengelola komputasi untuk melatih model Anda dengan cara yang dapat diskalakan. Anda dapat mengirimkan pekerjaan Anda ke jenis target komputasi yang disebut komputasi tanpa server. Komputasi tanpa server adalah cara termampu untuk menjalankan pekerjaan pelatihan di Azure Pembelajaran Mesin. Komputasi tanpa server adalah komputasi sesuai permintaan yang dikelola sepenuhnya. Azure Machine Learning menyediakan, mengatur skala, dan pengelolaan sumber daya komputasi untuk Anda. Ketika Anda menggunakan komputasi tanpa server untuk melatih model, Anda dapat fokus pada pembangunan model pembelajaran mesin dan tidak perlu belajar tentang infrastruktur komputasi atau menyiapkannya.

Anda dapat menentukan sumber daya yang dibutuhkan pekerjaan. Azure Machine Learning mengelola infrastruktur komputasi dan menyediakan isolasi jaringan terkelola, mengurangi beban pada Anda.

Perusahaan juga dapat mengurangi biaya dengan menentukan sumber daya yang optimal untuk setiap pekerjaan. Administrator TI masih dapat menerapkan kontrol dengan menentukan kuota inti di tingkat langganan dan ruang kerja dan menerapkan kebijakan Azure.

Anda dapat menggunakan komputasi tanpa server untuk menyempurnakan model dalam katalog model. Anda dapat menggunakannya untuk menjalankan semua jenis pekerjaan dengan menggunakan studio Azure Machine Learning, Python SDK, dan Azure CLI. Anda juga dapat menggunakan komputasi tanpa server untuk membangun gambar lingkungan dan untuk skenario dasbor AI yang bertanggung jawab. Pekerjaan tanpa server menggunakan kuota yang sama dengan kuota komputasi Azure Pembelajaran Mesin. Anda dapat memilih VM tingkat standar (khusus) atau spot (berprioritas rendah). Identitas terkelola dan identitas pengguna didukung untuk pekerjaan tanpa server. Model penagihan sama dengan model untuk komputasi Azure Machine Learning.

Prasyarat


  • Persyaratan peran: Anda memerlukan setidaknya peran Kontributor atau Ilmuwan Data Azure ML di ruang kerja untuk mengirimkan pekerjaan.

Kirim pekerjaan serverless pertama Anda

Contoh berikut menunjukkan pekerjaan perintah minimal yang berjalan pada komputasi tanpa server. Saat Anda menghilangkan compute parameter, pekerjaan secara otomatis menggunakan komputasi tanpa server.

from azure.ai.ml import command, MLClient
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential

# Initialize the ML client
try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()
ml_client = MLClient(
    credential=credential,
    subscription_id="<Azure-subscription-ID>",
    resource_group_name="<Azure-resource-group>",
    workspace_name="<Azure-Machine-Learning-workspace>",
)

# Create a simple command job - omitting 'compute' uses serverless
job = command(
    command="echo 'hello world'",
    environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
)

# Submit the job
returned_job = ml_client.create_or_update(job)
print(f"Job submitted: {returned_job.name}")

Output yang diharapkan: Pekerjaan dibuat dan mengembalikan objek pekerjaan dengan status NotStarted atau Starting. Pantau kemajuan di studio Azure ML atau dengan memanggil ml_client.jobs.get(returned_job.name).

Referensi:fungsi perintah | MLClient

Keuntungan komputasi tanpa server

  • Azure Machine Learning mengelola pembuatan, pengaturan, penskalaan, penghapusan, dan penambalan infrastruktur komputasi untuk mengurangi overhead manajemen.
  • Anda tidak perlu mempelajari tentang komputasi, berbagai jenis komputasi, atau properti terkait.
  • Anda tidak perlu membuat kluster berulang kali untuk setiap ukuran VM yang Anda butuhkan, menggunakan pengaturan yang sama, dan mereplikasi untuk setiap ruang kerja.
  • Anda dapat mengoptimalkan biaya dengan menentukan sumber daya yang tepat yang dibutuhkan setiap pekerjaan pada runtime untuk jenis instans (ukuran VM) dan jumlah instans. Anda juga dapat memantau metrik pemanfaatan pekerjaan untuk mengoptimalkan sumber daya yang dibutuhkan pekerjaan.
  • Lebih sedikit langkah yang diperlukan untuk menjalankan pekerjaan.
  • Untuk lebih menyederhanakan pengiriman pekerjaan, Anda dapat melewati sumber daya sama sekali. Azure Machine Learning secara default menghitung instans dan memilih jenis instans dengan mempertimbangkan faktor-faktor seperti kuota, biaya, performa, dan ukuran disk.
  • Dalam beberapa skenario, waktu tunggu sebelum pekerjaan mulai berjalan berkurang.
  • Identitas pengguna dan identitas terkelola yang ditetapkan pengguna pada ruang kerja didukung untuk pengajuan pekerjaan.
  • Dengan isolasi jaringan terkelola, Anda dapat merampingkan dan mengotomatiskan konfigurasi isolasi jaringan Anda. Jaringan virtual pelanggan juga didukung.
  • Kontrol administratif tersedia melalui kuota dan kebijakan Azure.

Cara menggunakan komputasi tanpa server

  • Saat Anda membuat kluster komputasi Anda sendiri, Anda menggunakan namanya dalam pekerjaan perintah. Contohnya, compute="cpu-cluster". Dengan tanpa server, Anda dapat melewati pembuatan kluster komputasi, dan menghilangkan compute parameter untuk menggunakan komputasi tanpa server. Ketika compute tidak ditentukan untuk pekerjaan, pekerjaan berjalan pada komputasi tanpa server. Hilangkan nama komputasi dalam pekerjaan Azure CLI atau Python SDK Anda untuk menggunakan komputasi tanpa server dalam jenis pekerjaan berikut, dan secara opsional menyediakan sumber daya yang dibutuhkan pekerjaan untuk jumlah instans dan jenis instans:

    • Pekerjaan perintah, termasuk pekerjaan interaktif dan pelatihan terdistribusi
    • Pekerjaan AutoML
    • Menyapu pekerjaan
    • Pekerjaan paralel
  • Untuk pekerjaan alur melalui Azure CLI, gunakan default_compute: azureml:serverless untuk komputasi default tingkat alur. Untuk pekerjaan alur melalui Python SDK, gunakan default_compute="serverless". Lihat Tugas Pipeline sebagai contoh.

  • Saat Anda mengirimkan pekerjaan pelatihan di studio, pilih Serverless sebagai jenis komputasi.

  • Saat menggunakan perancang Azure Machine Learning, pilih Tanpa Server sebagai komputasi default.

Pertimbangan performa

Komputasi tanpa server dapat meningkatkan kecepatan pelatihan Anda dengan cara berikut:

Hindari kegagalan kuota yang tidak mencukup. Saat membuat kluster komputasi Anda sendiri, Anda bertanggung jawab untuk menentukan ukuran VM dan jumlah simpul. Ketika pekerjaan Anda berjalan, jika Anda tidak memiliki kuota yang memadai untuk kluster, pekerjaan gagal. Komputasi tanpa server menggunakan informasi tentang kuota Anda untuk memilih ukuran VM yang sesuai secara default.

Pengoptimalan penurunan skala. Ketika kluster komputasi mengurangi skala, pekerjaan baru harus menunggu kluster tersebut mengurangi dan kemudian meningkatkan skala sebelum pekerjaan dapat berjalan. Dengan komputasi tanpa server, Anda tidak perlu menunggu penurunan skala. Pekerjaan Anda dapat mulai berjalan pada kluster/simpul lain (dengan asumsi Anda memiliki kuota).

Pengoptimalan kluster sibuk. Saat pekerjaan berjalan pada kluster komputasi dan pekerjaan lain dikirimkan, pekerjaan Anda diantrekan di belakang pekerjaan yang sedang berjalan. Dengan komputasi tanpa server, pekerjaan Anda dapat mulai berjalan pada node/kluster lain (dengan asumsi Anda memiliki kuota).

Kuota

Saat mengirimkan pekerjaan, Anda masih memerlukan kuota komputasi Azure Machine Learning yang memadai untuk melanjutkan (kuota tingkat ruang kerja dan tingkat langganan). Ukuran VM default untuk pekerjaan tanpa server dipilih berdasarkan kuota ini. Jika Anda menentukan ukuran/keluarga VM Anda sendiri:

  • Jika Anda memiliki beberapa kuota untuk ukuran/keluarga VM Anda tetapi tidak memiliki kuota yang cukup untuk jumlah instans, Anda akan melihat pesan kesalahan. Kesalahan merekomendasikan agar Anda mengurangi jumlah instans ke angka yang valid berdasarkan batas kuota Anda, meminta peningkatan kuota untuk keluarga VM, atau mengubah ukuran VM.
  • Jika Anda tidak memiliki kuota untuk ukuran VM yang ditentukan, Anda akan melihat kesalahan. Pesan kesalahan ini merekomendasikan agar Anda memilih ukuran VM lain yang mempunyai kuota yang tersedia atau mengajukan permintaan kuota untuk keluarga VM.
  • Jika Anda memiliki kuota yang cukup untuk "keluarga VM" (VM family) guna menjalankan pekerjaan serverless tetapi pekerjaan lain menggunakan kuota tersebut, Anda akan menerima pesan yang menyatakan bahwa pekerjaan Anda harus menunggu dalam antrian hingga kuota tersedia.

Saat Anda melihat penggunaan dan kuota di portal Microsoft Azure, Anda akan melihat nama Tanpa Server untuk semua kuota yang digunakan oleh pekerjaan tanpa server.

Dukungan identitas dan penerusan informasi kredensial

Komputasi tanpa server mendukung dua opsi identitas untuk mengakses penyimpanan dan sumber daya lainnya:

  • Passthrough kredensial pengguna: Menggunakan token ID Microsoft Entra Anda. Terbaik untuk pengembangan dan pengujian interaktif.
  • Identitas terkelola yang ditetapkan pengguna: Menggunakan identitas terkelola ruang kerja. Terbaik untuk skenario produksi dan otomatisasi.
  • Passthrough kredensial pengguna: Komputasi tanpa server sepenuhnya mendukung passthrough kredensial pengguna. Token pengguna dari pengguna yang mengirimkan pekerjaan digunakan untuk akses penyimpanan. Kredensial ini berasal dari ID Microsoft Entra.

    Komputasi tanpa server tidak mendukung identitas yang ditetapkan sistem.

    from azure.ai.ml import command
    from azure.ai.ml import MLClient     # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential     # Authentication package.
    from azure.ai.ml.entities import UserIdentityConfiguration 
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com.
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure subscription ID>", 
        resource_group_name="<Azure resource group>",
        workspace_name="<Azure Machine Learning workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
        identity=UserIdentityConfiguration(),
    )
    # Submit the command job.
    ml_client.create_or_update(job)
    

    Referensi:UserIdentityConfiguration | fungsi perintah

  • Identitas terkelola yang ditetapkan pengguna: Saat Anda memiliki ruang kerja yang dikonfigurasi dengan identitas terkelola yang ditetapkan pengguna, Anda dapat menggunakan identitas tersebut dengan pekerjaan tanpa server untuk akses penyimpanan. Untuk informasi tentang mengakses rahasia, lihat Menggunakan rahasia kredensial autentikasi dalam pekerjaan Azure Machine Learning.

  1. Verifikasi konfigurasi identitas ruang kerja Anda.

    from azure.ai.ml import MLClient
    from azure.identity import DefaultAzureCredential
    
    subscription_id = "<your-subscription-id>"
    resource_group = "<your-resource-group>"
    workspace = "<your-workspace-name>"
    
    ml_client = MLClient(
        DefaultAzureCredential(),
        subscription_id,
        resource_group,
        workspace
    )
    
    # Get workspace details.
    ws = ml_client.workspaces.get(name=workspace)
    print(ws)
    
    

    Cari identitas yang ditetapkan pengguna dalam output. Jika tidak ada, buat ruang kerja baru dengan identitas terkelola yang ditetapkan pengguna dengan mengikuti instruksi dalam Menyiapkan autentikasi antara Azure Machine Learning dan layanan lainnya.

  2. Gunakan identitas terkelola yang ditetapkan pengguna dalam pekerjaan Anda.

    from azure.ai.ml import command
    from azure.ai.ml import MLClient     # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential    # Authentication package.
    from azure.ai.ml.entities import ManagedIdentityConfiguration
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com.
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure-subscription-ID>", 
        resource_group_name="<Azure-resource-group>",
        workspace_name="<Azure-Machine-Learning-workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
        identity= ManagedIdentityConfiguration(client_id="<workspace-UAMI-client-ID>"),
    )
    # Submit the command job.
    ml_client.create_or_update(job)
    

Referensi:ManagedIdentityConfiguration

Konfigurasi properti untuk tugas perintah

Jika tidak ada target komputasi yang ditentukan untuk pekerjaan command, pekerjaan sweep, dan pekerjaan AutoML, komputasi secara default menggunakan komputasi tanpa server. Berikut adalah sebuah contoh:

from azure.ai.ml import command 
from azure.ai.ml import MLClient # Handle to the workspace.
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package.

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com.
ml_client = MLClient(
    credential=credential,
    subscription_id="<Azure-subscription-ID>", 
    resource_group_name="<Azure-resource-group>",
    workspace_name="<Azure-Machine-Learning-workspace>",
)
job = command(
    command="echo 'hello world'",
    environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
)
# Submit the command job.
ml_client.create_or_update(job)

Komputasi secara bawaan menggunakan komputasi tanpa server dengan:

  • Satu simpul, untuk pekerjaan ini. Jumlah default simpul didasarkan pada jenis pekerjaan. Lihat bagian berikut untuk jenis pekerjaan lainnya.
  • Mesin virtual CPU. VM ditentukan berdasarkan kuota, performa, biaya, dan ukuran disk.
  • Komputer virtual khusus.
  • Lokasi ruang kerja.

Anda dapat mengambil alih default ini. Jika Anda ingin menentukan jenis VM atau jumlah simpul untuk komputasi tanpa server, tambahkan resources ke pekerjaan Anda:

  • Gunakan instance_type untuk memilih VM tertentu. Gunakan parameter ini jika Anda menginginkan ukuran VM CPU atau GPU tertentu

  • Gunakan instance_count untuk menentukan jumlah simpul.

    from azure.ai.ml import command 
    from azure.ai.ml import MLClient # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential # Authentication package.
    from azure.ai.ml.entities import JobResourceConfiguration 
    
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com.
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure-subscription-ID>", 
        resource_group_name="<Azure-resource-group>",
        workspace_name="<Azure-Machine-Learning-workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
        resources = JobResourceConfiguration(instance_type="Standard_NC24", instance_count=4)
    )
    # Submit the command job.
    ml_client.create_or_update(job)
    

    Referensi:JobResourceConfiguration

  • Untuk mengubah tingkat pekerjaan, gunakan queue_settings untuk memilih antara VM khusus (job_tier: Standard) dan VM berprioritas rendah (job_tier: Spot).

    from azure.ai.ml import command
    from azure.ai.ml import MLClient    # Handle to the workspace.
    from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential    # Authentication package.
    try:
        credential = DefaultAzureCredential()
        credential.get_token("https://management.azure.com/.default")
    except Exception:
        credential = InteractiveBrowserCredential()
    # Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com.
    ml_client = MLClient(
        credential=credential,
        subscription_id="<Azure-subscription-ID>", 
        resource_group_name="<Azure-resource-group>",
        workspace_name="<Azure-Machine-Learning-workspace>",
    )
    job = command(
        command="echo 'hello world'",
        environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
        queue_settings={
          "job_tier": "Spot"  
        }
    )
    # Submit the command job.
    ml_client.create_or_update(job)
    

Contoh untuk semua bidang dengan tugas perintah

Berikut adalah contoh yang menunjukkan semua bidang yang ditentukan, termasuk identitas yang perlu digunakan oleh pekerjaan. Anda tidak perlu menentukan pengaturan jaringan virtual karena isolasi jaringan terkelola tingkat ruang kerja secara otomatis digunakan.

from azure.ai.ml import command
from azure.ai.ml import MLClient      # Handle to the workspace.
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential     # Authentication package.
from azure.ai.ml.entities import JobResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration 

try:
    credential = DefaultAzureCredential()
    credential.get_token("https://management.azure.com/.default")
except Exception:
    credential = InteractiveBrowserCredential()
# Get a handle to the workspace. You can find the info on the workspace tab on ml.azure.com.
ml_client = MLClient(
    credential=credential,
    subscription_id="<Azure-subscription-ID>", 
    resource_group_name="<Azure-resource-group>",
    workspace_name="<Azure-Machine-Learning-workspace>",
)
job = command(
    command="echo 'hello world'",
    environment="azureml://registries/azureml/environments/sklearn-1.5/labels/latest",
    identity=UserIdentityConfiguration(),
    queue_settings={
        "job_tier": "Standard"
    }
)
job.resources = JobResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# Submit the command job.
ml_client.create_or_update(job)

Referensi:JobResourceConfiguration | UserIdentityConfiguration | fungsi perintah

Berikut adalah dua contoh penggunaan komputasi tanpa server lagi untuk pelatihan:

Pekerjaan AutoML

Anda tidak perlu menentukan komputasi untuk pekerjaan AutoML. Sumber daya dapat ditentukan secara opsional. Jika jumlah instans tidak ditentukan, jumlah instans tersebut diatur secara default berdasarkan max_concurrent_trials dan max_nodes parameter. Jika Anda mengirimkan klasifikasi gambar AutoML atau tugas NLP tanpa menentukan jenis instans, ukuran VM GPU dipilih secara otomatis. Anda dapat mengirimkan pekerjaan AutoML dengan menggunakan CLI, Python SDK, atau studio.

Jika Anda ingin menentukan jenis atau jumlah instans, gunakan ResourceConfiguration kelas .

# Create the AutoML classification job with the related factory-function.
from azure.ai.ml.entities import ResourceConfiguration 

classification_job = automl.classification(
    experiment_name=exp_name,
    training_data=my_training_data_input,
    target_column_name="y",
    primary_metric="accuracy",
    n_cross_validations=5,
    enable_model_explainability=True,
    tags={"my_custom_tag": "My custom value"},
)

# Limits are all optional
classification_job.set_limits(
    timeout_minutes=600,
    trial_timeout_minutes=20,
    max_trials=max_trials,
    # max_concurrent_trials = 4,
    # max_cores_per_trial: -1,
    enable_early_termination=True,
)

# Training properties are optional
classification_job.set_training(
    blocked_training_algorithms=[ClassificationModels.LOGISTIC_REGRESSION],
    enable_onnx_compatible_models=True,
)

# Serverless compute resources used to run the job
classification_job.resources = 
ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=6)

Pekerjaan pipeline

Untuk pekerjaan alur, tentukan "serverless" sebagai jenis komputasi default Anda untuk menggunakan komputasi tanpa server.

# Construct pipeline
@pipeline()
def pipeline_with_components_from_yaml(
    training_input,
    test_input,
    training_max_epochs=20,
    training_learning_rate=1.8,
    learning_rate_schedule="time-based",
):
    """E2E dummy train-score-eval pipeline with components defined via yaml."""
    # Call component obj as function: apply given inputs & parameters to create a node in pipeline
    train_with_sample_data = train_model(
        training_data=training_input,
        max_epochs=training_max_epochs,
        learning_rate=training_learning_rate,
        learning_rate_schedule=learning_rate_schedule,
    )

    score_with_sample_data = score_data(
        model_input=train_with_sample_data.outputs.model_output, test_data=test_input
    )
    score_with_sample_data.outputs.score_output.mode = "upload"

    eval_with_sample_data = eval_model(
        scoring_result=score_with_sample_data.outputs.score_output
    )

    # Return: pipeline outputs
    return {
        "trained_model": train_with_sample_data.outputs.model_output,
        "scored_data": score_with_sample_data.outputs.score_output,
        "evaluation_report": eval_with_sample_data.outputs.eval_output,
    }


pipeline_job = pipeline_with_components_from_yaml(
    training_input=Input(type="uri_folder", path=parent_dir + "/data/"),
    test_input=Input(type="uri_folder", path=parent_dir + "/data/"),
    training_max_epochs=20,
    training_learning_rate=1.8,
    learning_rate_schedule="time-based",
)

# set pipeline to use serverless compute
pipeline_job.settings.default_compute = "serverless"

Anda juga dapat mengatur komputasi tanpa server sebagai komputasi default di Designer.

Mengonfigurasi pekerjaan alur tanpa server dengan identitas terkelola yang ditetapkan pengguna

Saat Anda menggunakan komputasi tanpa server dalam pekerjaan alur, kami sarankan Anda mengatur identitas pengguna pada tingkat langkah individual yang akan dijalankan pada komputasi, bukan di tingkat alur akar. (Meskipun pengaturan identitas didukung pada tingkat alur akar dan langkah, pengaturan tingkat langkah lebih diutamakan jika keduanya diatur. Namun, untuk alur yang berisi komponen alur, identitas harus diatur pada langkah-langkah individual yang akan dijalankan. Identitas yang ditetapkan pada alur akar atau tingkat komponen alur tidak akan berfungsi. Oleh karena itu, kami menyarankan pengaturan identitas pada tingkat langkah individu demi kesederhanaan.)

def my_pipeline():
    train_job = train_component(
        training_data=Input(type="uri_folder", path="./data")
    )
    # Set managed identity for the job
    train_job.identity = {"type": "managed"}
    return {"train_output": train_job.outputs}

pipeline_job = my_pipeline()
# Configure the pipeline to use serverless compute.
pipeline_job.settings.default_compute = "serverless"

Lihat contoh pelatihan lainnya dengan komputasi tanpa server: