Apa itu lingkungan Azure Machine Learning?

Lingkungan Azure Machine Learning adalah enkapsulasi lingkungan tempat pelatihan pembelajaran mesin Anda terjadi. Lingkungan menentukan paket Python, variabel lingkungan, dan pengaturan perangkat lunak di sekitar skrip pelatihan dan penilaian Anda. Lingkungan juga menentukan runtime (Python, Spark, atau Docker). Lingkungan adalah entitas terkelola dan versi dalam ruang kerja Pembelajaran Mesin yang memungkinkan alur kerja pembelajaran mesin yang dapat direproduksi, diaudit, dan portabel di berbagai target komputasi.

Anda dapat menggunakan objek Environment pada komputasi lokal untuk:

  • Mengembangkan skrip pelatihan.
  • Menggunakan kembali lingkungan yang sama di Azure Machine Learning Compute untuk pelatihan model dalam skala besar.
  • Menyebarkan model dengan lingkungan yang sama.
  • Mengunjungi kembali lingkungan tempat model yang ada dilatih.

Diagram berikut ini menggambarkan bagaimana Anda dapat menggunakan satu objek Environment dalam konfigurasi eksekusi (untuk pelatihan) dan konfigurasi inferensi dan penyebaran (untuk penyebaran layanan web).

Diagram lingkungan dalam alur kerja pembelajaran mesin

Lingkungan, target komputasi, dan skrip pelatihan bersama-sama membentuk konfigurasi eksekusi: spesifikasi lengkap dari pelatihan yang dijalankan.

Jenis lingkungan

Lingkungan secara luas dapat dibagi menjadi tiga kategori: dipilih, dikelola pengguna, dan dikelola sistem.

Lingkungan yang dikumpulkan disediakan oleh Azure Machine Learning dan tersedia di ruang kerja secara default. Dimaksudkan untuk digunakan apa adanya, lingkungan tersebut berisi kumpulan paket dan pengaturan Python untuk membantu Anda mulai menggunakan berbagai kerangka pembelajaran mesin. Lingkungan yang telah dibuat sebelumnya ini juga memungkinkan waktu penyebaran yang lebih cepat. Untuk daftar lengkap, lihat artikel lingkungan yang dipilih.

Di lingkungan yang dikelola pengguna, Anda bertanggung jawab untuk menyiapkan lingkungan dan menginstal setiap paket yang dibutuhkan skrip pelatihan Anda di target komputasi. Pastikan juga untuk menyertakan semua dependensi yang diperlukan untuk penyebaran model.

Anda menggunakan lingkungan yang dikelola sistem saat Anda ingin conda mengelola lingkungan Python. Lingkungan conda baru dimaterialisasi dari spesifikasi conda Anda di atas gambar docker dasar.

Membuat dan mengelola lingkungan

Anda dapat membuat lingkungan dari klien seperti SDK Python AzureML, CLI Azure Machine Learning, halaman Lingkungan di studio Azure Machine Learning, dan ekstensi Visual Studio Code. Setiap klien mengizinkan Anda untuk menyesuaikan gambar dasar, Dockerfile, dan lapisan Python jika diperlukan.

Untuk sampel kode tertentu, lihat bagian "Membuat lingkungan" di Cara menggunakan lingkungan.

Lingkungan juga mudah dikelola melalui ruang kerja, yang memungkinkan Anda untuk:

  • Daftarkan lingkungan.
  • Ambil lingkungan dari ruang kerja Anda untuk digunakan untuk pelatihan atau penyebaran.
  • Buat instans baru dari lingkungan dengan mengedit yang sudah ada.
  • Lihat perubahan pada lingkungan Anda dari waktu ke waktu, yang memastikan reproduktifitas.
  • Bangun gambar Docker secara otomatis dari lingkungan Anda.

Lingkungan "Anonim" secara otomatis terdaftar di ruang kerja saat Anda mengirimkan eksperimen. Lingkungan tidak akan terdaftar tetapi dapat diambil berdasarkan versi.

Untuk sampel kode, lihat bagian "Mengelola lingkungan" di Cara menggunakan lingkungan.

Pembangunan, pembuatan cache, dan penggunaan kembali lingkungan

Azure Machine Learning membangun definisi lingkungan ke dalam gambar Docker dan lingkungan conda. Layanan ini juga membuat cache lingkungan sehingga dapat digunakan kembali dalam eksekusi pelatihan dan penyebaran titik akhir layanan berikutnya. Menjalankan skrip pelatihan dari jarak jauh memerlukan pembuatan gambar Docker, tetapi eksekusi lokal dapat menggunakan lingkungan conda secara langsung.

Mengirimkan eksekusi menggunakan lingkungan

Saat pertama kali Anda mengirimkan eksekusi jarak jauh menggunakan lingkungan, Azure Machine Learning service memanggil Tugas Build ACR di Azure Container Registry (ACR) yang terkait dengan Ruang Kerja. Citra Docker yang dibangun kemudian di-cache di ACR Ruang Kerja. Lingkungan yang dipilih didukung oleh citra Docker yang di-cache di Global ACR. Di awal eksekusi run, citra diambil oleh target komputasi dari ACR yang relevan.

Untuk eksekusi lokal, lingkungan Docker atau conda dibuat berdasarkan definisi lingkungan. Skrip kemudian dieksekusi pada komputasi target - lingkungan runtime lokal atau mesin Docker lokal.

Membangun lingkungan sebagai citra Docker

Jika gambar untuk definisi lingkungan tertentu belum ada di ruang kerja Azure Container Registry, gambar baru akan dibangun. Build gambar terdiri dari dua langkah:

  1. Mengunduh citra dasar, dan menjalankan langkah Docker apa pun
  2. Membangun lingkungan konda sesuai dengan dependensi conda yang ditentukan dalam definisi lingkungan.

Langkah kedua dihilangkan jika Anda menentukan dependensi yang dikelola pengguna. Dalam hal ini Anda bertanggung jawab untuk menginstal paket Python apa pun, dengan menyertakannya di citra dasar, atau menentukan langkah Docker kustom dalam langkah pertama. Anda juga bertanggung jawab untuk menentukan lokasi yang benar untuk Python yang dapat dieksekusi. Dimungkinkan juga untuk menggunakan citra dasar Docker kustom.

Pembuatan cache gambar dan penggunaan kembali

Jika Anda menggunakan definisi lingkungan yang sama untuk eksekusi lain, Azure Machine Learning akan menggunakan kembali gambar yang disimpan dari Ruang Kerja Azure Container Registry untuk menghemat waktu.

Untuk melihat detail gambar yang disimpan, periksa halaman Lingkungan di studio Azure Machine Learning atau gunakan metode Environment.get_image_details.

Untuk menentukan apakah akan menggunakan kembali gambar yang disimpan atau membuat yang baru, AzureML menghitung nilai hash dari definisi lingkungan dan membandingkannya dengan hash dari lingkungan yang ada. Hash didasarkan pada definisi lingkungan:

  • Gambar dasar
  • Langkah docker kustom
  • Paket Python
  • Paket Spark

Hash tidak terpengaruh oleh nama atau versi lingkungan. Jika Anda mengganti nama lingkungan Anda atau membuat yang baru dengan pengaturan dan paket yang sama dengan lingkungan lain, maka nilai hash akan tetap sama. Tetapi, perubahan definisi lingkungan seperti menambahkan atau menghapus paket Python atau mengubah versi paket akan menyebabkan nilai hash yang dihasilkan berubah. Mengubah urutan dependensi atau saluran di lingkungan juga akan mengubah hash dan memerlukan pembangunan gambar baru. Demikian pula, setiap perubahan pada lingkungan yang dikumpulkan akan menghasilkan pembuatan lingkungan "bukan dikumpulkan" baru.

Catatan

Anda tidak akan dapat mengirimkan perubahan lokal apa pun ke lingkungan yang dikumpulkan tanpa mengubah nama lingkungan. Awalan "AzureML-" dan "Microsoft" dicadangkan secara eksklusif untuk lingkungan yang dikumpulkan, dan pengiriman pekerjaan Anda akan gagal jika namanya dimulai dengan salah satu dari awalan tersebut.

Nilai hash yang dihitung dari lingkungan dibandingkan dengan yang ada di Ruang Kerja dan Azure Container Registry global, atau pada target komputasi (hanya eksekusi lokal). Jika ada kecocokan maka gambar yang disimpan ditarik dan digunakan, jika tidak, pembangunan gambar akan dipicu.

Diagram berikut menunjukkan tiga definisi lingkungan. Dua di antaranya memiliki nama dan versi yang berbeda tetapi gambar dasar dan paket Python identik, yang menghasilkan hash yang sama dan gambar yang disimpan yang sesuai. Lingkungan ketiga memiliki paket dan versi Python yang berbeda, yang mengarah ke hash dan gambar yang disimpan yang berbeda.

Diagram penembolokan lingkungan dan gambar Docker

Gambar yang disimpan yang aktual di ruang kerja Azure Container Registry Anda akan memiliki nama seperti azureml/azureml_e9607b2514b066c851012848913ba19f dengan hash muncul di bagian akhir.

Penting

  • Jika Anda membuat lingkungan dengan dependensi paket yang tidak disematkan (misalnya, numpy), lingkungan menggunakan versi paket yang tersedia saat lingkungan dibuat. Lingkungan masa depan apa pun yang menggunakan definisi yang cocok akan menggunakan versi aslinya.

    Untuk memperbarui paket, tentukan nomor versi untuk memaksa pembangunan ulang gambar. Contohnya adalah mengubah numpy menjadi numpy==1.18.1. Dependensi baru--termasuk yang berlapis--akan diinstal, dan dependensi mungkin merusak skenario yang berfungsi sebelumnya.

  • Menggunakan gambar dasar yang tidak disematkan seperti mcr.microsoft.com/azureml/openmpi3.1.2-ubuntu18.04 dalam definisi lingkungan Anda menghasilkan pembangunan ulang gambar setiap kali tag latest diperbarui. Hal ini membantu gambar menerima patch terbaru dan pembaruan sistem.

Peringatan

Metode Environment.build akan membangun kembali gambar yang disimpan, dengan kemungkinan efek samping memperbarui paket yang tidak disematkan dan merusak reproduktifitas untuk semua definisi lingkungan yang sesuai dengan gambar yang disimpan tersebut.

Penambalan gambar

Microsoft bertanggung jawab untuk menambal gambar dasar untuk kerentanan keamanan yang diketahui. Pembaruan untuk gambar yang didukung dirilis setiap dua minggu, dengan komitmen tidak ada kerentanan yang belum ditambal yang lebih lama dari 30 hari dalam versi gambar terbaru. Gambar yang ditambal dirilis dengan tag baru yang tidak dapat diubah dan tag :latest diperbarui ke versi terbaru dari gambar yang ditambal.

Jika Anda memberikan gambar Anda sendiri, Anda bertanggung jawab untuk memperbaruinya.

Untuk informasi selengkapnya tentang gambar dasar, lihat tautan berikut:

Langkah berikutnya