Bagikan melalui


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 Pembelajaran Mesin membuat, menskalakan, dan mengelola 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.

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 Pekerjaan alur misalnya.

  • 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

  • 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     # Authentication package.
    from azure.ai.ml.entities import ResourceConfiguration
    from azure.ai.ml.entities import UserIdentityConfiguration 
    
    credential = DefaultAzureCredential()
    # 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)
    
  • 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    # Authentication package.
    from azure.ai.ml.entities import ResourceConfiguration
    from azure.ai.ml.entities import ManagedIdentityConfiguration
    
    credential = DefaultAzureCredential()
    # 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)
    

Mengonfigurasi properti untuk pekerjaan 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 # Authentication package.

credential = DefaultAzureCredential()
# 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 default ke 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 # Authentication package.
    from azure.ai.ml.entities import JobResourceConfiguration 
    
    credential = DefaultAzureCredential()
    # 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)
    
  • 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    # Authentication package.
    credential = DefaultAzureCredential()
    # 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 pekerjaan 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     # Authentication package.
from azure.ai.ml.entities import ResourceConfiguration
from azure.ai.ml.entities import UserIdentityConfiguration 

credential = DefaultAzureCredential()
# 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 = ResourceConfiguration(instance_type="Standard_E4s_v3", instance_count=1)
# Submit the command job.
ml_client.create_or_update(job)

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 alur

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: