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 lagi membuat dan mengelola komputasi untuk melatih model Anda dengan cara yang dapat diskalakan. Pekerjaan Anda dapat dikirimkan ke jenis target komputasi baru, 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. Melalui pelatihan model dengan komputasi tanpa server, profesional pembelajaran mesin dapat fokus pada keahlian mereka dalam membangun model pembelajaran mesin dan tidak perlu belajar tentang infrastruktur komputasi atau menyiapkannya.

Profesional pembelajaran mesin dapat menentukan sumber daya yang dibutuhkan pekerjaan. Azure Pembelajaran Mesin 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. Admin TI masih dapat menerapkan kontrol dengan menentukan kuota inti di tingkat langganan dan ruang kerja dan menerapkan kebijakan Azure.

Komputasi tanpa server dapat digunakan untuk menyempurnakan model dalam katalog model seperti LLAMA 2. Komputasi tanpa server dapat digunakan untuk menjalankan semua jenis pekerjaan dari Azure Pembelajaran Mesin studio, SDK, dan CLI. Komputasi tanpa server juga dapat digunakan 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 komputasi Azure Pembelajaran Mesin.

Keuntungan komputasi tanpa server

  • Azure Pembelajaran Mesin mengelola pembuatan, pengaturan, penskalaan, penghapusan, patching, infrastruktur komputasi yang mengurangi overhead manajemen
  • Anda tidak perlu mempelajari tentang komputasi, berbagai jenis komputasi, dan properti terkait.
  • Tidak perlu membuat kluster berulang kali untuk setiap ukuran VM yang diperlukan, 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 dalam hal jenis instans (ukuran VM) dan jumlah instans. Anda dapat memantau metrik pemanfaatan pekerjaan untuk mengoptimalkan sumber daya yang dibutuhkan pekerjaan.
  • Pengurangan langkah-langkah yang terlibat untuk menjalankan pekerjaan
  • Untuk lebih menyederhanakan pengiriman pekerjaan, Anda dapat melewati sumber daya sama sekali. Azure Pembelajaran Mesin default jumlah instans dan memilih jenis instans (ukuran VM) berdasarkan faktor-faktor seperti kuota, biaya, performa, dan ukuran disk.
  • Waktu tunggu yang lebih sedikit sebelum pekerjaan mulai dieksekusi dalam beberapa kasus.
  • Identitas pengguna dan identitas terkelola yang ditetapkan pengguna ruang kerja didukung untuk pengiriman pekerjaan.
  • Dengan isolasi jaringan terkelola, Anda dapat merampingkan dan mengotomatiskan konfigurasi isolasi jaringan Anda. Jaringan virtual pelanggan juga didukung
  • Kontrol admin melalui kuota dan kebijakan Azure

Cara menggunakan komputasi tanpa server

  • Anda dapat menyempurnakan model fondasi seperti LLAMA 2 menggunakan notebook seperti yang ditunjukkan di bawah ini:

  • Saat Anda membuat kluster komputasi Anda sendiri, Anda menggunakan namanya dalam pekerjaan perintah, seperti 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 CLI atau SDK Anda untuk menggunakan komputasi tanpa server dalam jenis pekerjaan berikut dan secara opsional menyediakan sumber daya yang diperlukan pekerjaan dalam hal jumlah instans dan jenis instans:

    • Pekerjaan perintah, termasuk pekerjaan interaktif dan pelatihan terdistribusi
    • Pekerjaan AutoML
    • Menyapu pekerjaan
    • Pekerjaan paralel
  • Untuk pekerjaan alur melalui penggunaan default_compute: azureml:serverless CLI untuk komputasi default tingkat alur. Untuk pekerjaan alur melalui SDK gunakan default_compute="serverless". Lihat Pekerjaan alur misalnya.

  • Saat Anda mengirimkan pekerjaan pelatihan di studio (pratinjau), pilih Tanpa Server sebagai jenis komputasi.

  • Saat menggunakan perancang Azure Pembelajaran Mesin, pilih Tanpa Server sebagai komputasi default.

  • Anda dapat menggunakan komputasi tanpa server untuk dasbor AI yang bertanggung jawab

Pertimbangan performa

Komputasi tanpa server dapat membantu mempercepat pelatihan Anda dengan cara berikut:

Kuota tidak mencukupi: Ketika Anda membuat kluster komputasi Anda sendiri, Anda bertanggung jawab untuk mencari tahu ukuran VM dan jumlah simpul yang akan dibuat. 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 menurunkan skala, pekerjaan baru harus menunggu penurunan skala terjadi dan kemudian meningkatkan skala sebelum pekerjaan dapat berjalan. Dengan komputasi tanpa server, Anda tidak perlu menunggu penurunan skala dan pekerjaan Anda dapat mulai berjalan pada kluster/node lain (dengan asumsi Anda memiliki kuota).

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

Kuota

Saat mengirimkan pekerjaan, Anda masih memerlukan kuota komputasi Azure Pembelajaran Mesin yang memadai untuk melanjutkan (kuota tingkat ruang kerja dan 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 cukup kuota untuk jumlah instans, Anda akan melihat kesalahan. Kesalahan merekomendasikan penurunan jumlah instans ke angka yang valid berdasarkan batas kuota Anda atau meminta peningkatan kuota untuk keluarga VM ini atau mengubah ukuran VM
  • Jika Anda tidak memiliki kuota untuk ukuran VM yang ditentukan, Anda akan melihat kesalahan. Kesalahan merekomendasikan untuk memilih ukuran VM yang berbeda yang Anda miliki kuota atau kuota permintaan untuk keluarga VM ini
  • Jika Anda memiliki kuota yang cukup untuk keluarga VM untuk menjalankan pekerjaan tanpa server, tetapi pekerjaan lain menggunakan kuota, Anda mendapatkan pesan bahwa pekerjaan Anda harus menunggu dalam antrean hingga kuota tersedia

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

Dukungan identitas dan kredensial yang diteruskan

  • Kredensial pengguna melewati : Komputasi tanpa server sepenuhnya mendukung pass through kredensial pengguna. Token pengguna pengguna yang mengirimkan pekerjaan digunakan untuk akses penyimpanan. Kredensial ini berasal dari ID Microsoft Entra 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 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-sklearn-1.0-ubuntu20.04-py38-cpu@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.

    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-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
            identity= ManagedIdentityConfiguration(),
    )
    # submit the command job
    ml_client.create_or_update(job)
    
    

Untuk informasi tentang melampirkan identitas terkelola yang ditetapkan pengguna, lihat melampirkan identitas terkelola yang ditetapkan pengguna.

Mengonfigurasi properti untuk pekerjaan perintah

Jika tidak ada target komputasi yang ditentukan untuk pekerjaan perintah, sapuan, dan AutoML, maka komputasi default ke komputasi tanpa server. Misalnya, untuk pekerjaan perintah ini:

from azure.ai.ml import command
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-sklearn-1.0-ubuntu20.04-py38-cpu@latest",
)
# submit the command job
ml_client.create_or_update(job)

Komputasi default ke komputasi tanpa server dengan:

  • Node tunggal untuk pekerjaan ini. Jumlah default simpul didasarkan pada jenis pekerjaan. Lihat bagian berikut untuk jenis pekerjaan lainnya.
  • Komputer virtual CPU, yang 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:

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

  • 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-sklearn-1.0-ubuntu20.04-py38-cpu@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 Prioritas rendah(jobtier: 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-sklearn-1.0-ubuntu20.04-py38-cpu@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 semua bidang yang ditentukan termasuk identitas yang harus digunakan pekerjaan. Tidak perlu menentukan pengaturan jaringan virtual karena tingkat ruang kerja isolasi jaringan terkelola digunakan secara otomatis.

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-sklearn-1.0-ubuntu20.04-py38-cpu@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)

Lihat contoh pelatihan lainnya dengan komputasi tanpa server di:-

Pekerjaan AutoML

Tidak perlu menentukan komputasi untuk pekerjaan AutoML. Sumber daya dapat ditentukan secara opsional. Jika jumlah instans tidak ditentukan, maka jumlah tersebut default berdasarkan parameter max_concurrent_trials dan max_nodes. Jika Anda mengirimkan klasifikasi gambar AutoML atau tugas NLP tanpa jenis instans, ukuran VM GPU dipilih secara otomatis. Anda dapat mengirimkan pekerjaan AutoML melalui CLI, SDK, atau Studio. Untuk mengirimkan pekerjaan AutoML dengan komputasi tanpa server di studio, pertama-tama aktifkan fitur kirim pekerjaan pelatihan di studio (pratinjau) di panel pratinjau.

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.

Langkah berikutnya

Lihat contoh pelatihan lainnya dengan komputasi tanpa server di:-