Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel ini menjelaskan cara melakukan inferensi batch pada Spark DataFrame menggunakan model terdaftar di Databricks. Alur kerja berlaku untuk berbagai pembelajaran mesin dan model pembelajaran mendalam, termasuk TensorFlow, PyTorch, dan scikit-learn. Ini termasuk praktik terbaik untuk pemuatan data, inferensi model, dan penyetelan performa.
Untuk inferensi model untuk aplikasi pembelajaran mendalam, Azure Databricks merekomendasikan alur kerja berikut. Misalnya notebook yang menggunakan TensorFlow dan PyTorch, lihat contoh-contoh inferensi batch .
Alur kerja inferensi model
Databricks merekomendasikan alur kerja berikut untuk melakukan inferensi batch menggunakan Spark DataFrames.
Langkah 1: Penyiapan lingkungan
Pastikan kluster Anda menjalankan versi Databricks ML Runtime yang kompatibel agar sesuai dengan lingkungan pelatihan. Model, yang dicatat menggunakan MLflow, berisi persyaratan yang dapat diinstal untuk memastikan bahwa lingkungan pelatihan dan inferensi cocok.
requirements_path = os.path.join(local_path, "requirements.txt")
if not os.path.exists(requirements_path):
dbutils.fs.put("file:" + requirements_path, "", True)
%pip install -r $requirements_path
%restart_python
Langkah 2: Memuat data ke dalam Spark DataFrames
Bergantung pada jenis data, gunakan metode yang sesuai untuk memuat data ke dalam Spark DataFrame:
Jenis data | Metode |
---|---|
Tabel dari Katalog Unity (Disarankan) | table = spark.table(input_table_name) |
File gambar (JPG, PNG) | files_df = spark.createDataFrame(map(lambda path: (path,), file_paths), ["path"]) |
TFRecords | df = spark.read.format("tfrecords").load(image_path) |
Format lain (Parquet, CSV, JSON, JDBC) | Muat menggunakan sumber data Spark. |
Langkah 3: Muat model dari registri model
Contoh ini menggunakan model dari Registri Model Databricks untuk inferensi.
predict_udf = mlflow.pyfunc.spark_udf(spark, model_uri)
Langkah 4: Lakukan inferensi model menggunakan UDF Pandas
Pandas UDF memanfaatkan Apache Arrow untuk transfer data secara efisien dan menggunakan pandas untuk pemrosesan. Langkah-langkah umum untuk melakukan inferensi dengan pandas UDF adalah sebagai berikut:
- Muat model terlatih: Gunakan MLflow untuk membuat Spark UDF untuk penyimpulan.
- Data input praproses: Pastikan skema input cocok dengan persyaratan model.
- Menjalankan prediksi model: Gunakan fungsi UDF model pada DataFrame.
df_result = df_spark.withColumn("prediction", predict_udf(*df_spark.columns))
- (Disarankan) Simpan prediksi ke Katalog Unity.
Contoh berikut menyimpan prediksi ke Unity Catalog.
df_result.write.mode("overwrite").saveAsTable(output_table)
Penyetelan performa untuk inferensi model
Bagian ini menyediakan beberapa tips untuk pemecahan masalah dan peningkatan kinerja pemodelan pada Azure Databricks. Untuk gambaran umum, lihat Melakukan inferensi batch menggunakan Spark DataFrame.
Biasanya ada dua bagian utama dalam inferensi model: alur input data dan inferensi model. Jalur input data memiliki beban besar pada I/O data dan inferensi model memiliki beban besar pada komputasi. Menentukan penyempitan alur kerja itu sederhana. Berikut adalah beberapa pendekatan:
- Kurangi model menjadi model sepele dan ukur contoh per detik. Jika perbedaan waktu dari ujung ke ujung antara model penuh dan model sepele minimal, maka alur input data kemungkinan merupakan hambatan, jika tidak, inferensi model adalah hambatan.
- Jika menjalankan inferensi model dengan GPU, periksa pemanfaatan GPU metrik. Jika pemanfaatan GPU tidak terus-menerus tinggi, alur input data mungkin menjadi hambatan.
Mengoptimalkan proses alur input data
Menggunakan GPU dapat mengoptimalkan kecepatan berjalan secara efisien untuk inferensi model. Ketika GPU dan akselerator lainnya menjadi lebih cepat, penting bahwa alur input data mengikuti permintaan. Alur input data membaca data ke dalam Spark DataFrames, mengubahnya, dan memuatnya sebagai input untuk inferensi model. Jika input data adalah hambatan, berikut adalah beberapa tips untuk meningkatkan throughput I/O:
Atur jumlah rekaman maksimal per kumpulan. Jumlah rekaman maksimum yang lebih besar dapat mengurangi overhead I/O untuk memanggil fungsi UDF selama rekaman tersebut dapat masuk ke dalam memori. Untuk mengatur ukuran batch, atur konfigurasi berikut:
spark.conf.set("spark.sql.execution.arrow.maxRecordsPerBatch", "5000")
Muat data dalam batch dan panggil sebelumnya saat melakukan pra-pemrosesan data input di UDF pandas.
Untuk TensorFlow, Azure Databricks merekomendasikan penggunaan API tf.data. Anda dapat mengurai peta secara paralel dengan mengatur
num_parallel_calls
dalam fungsimap
dan memanggilprefetch
danbatch
untuk prefetching dan batching.dataset.map(parse_example, num_parallel_calls=num_process).prefetch(prefetch_size).batch(batch_size)
Untuk PyTorch, Azure Databricks merekomendasikan penggunaan kelas DataLoader. Anda dapat mengatur
batch_size
untuk batching dannum_workers
untuk pemuatan data paralel.torch.utils.data.DataLoader(images, batch_size=batch_size, num_workers=num_process)
contoh inferensi Batch
Contoh di bagian ini mengikuti alur kerja inferensi pembelajaran mendalam yang direkomendasikan. Contoh-contoh ini mengilustrasikan bagaimana melakukan inferensi menggunakan model jaringan neural residual (ResNets) yang telah dilatih sebelumnya.
Ekstraksi data terstruktur dan inferensi batch menggunakan Spark UDF
Contoh notebook berikut menunjukkan pengembangan, pengelogan, dan evaluasi agen sederhana untuk ekstraksi data terstruktur untuk mengubah data mentah dan tidak terstruktur menjadi informasi yang terorganisir dan dapat digunakan melalui teknik ekstraksi otomatis. Pendekatan ini menunjukkan cara menerapkan agen kustom untuk inferensi batch menggunakan kelas PythonModel
MLflow dan menggunakan model agen yang dicatat sebagai Spark User-Defined Function (UDF). Notebook ini juga menunjukkan cara memanfaatkan Evaluasi Agen AI Mosaik untuk mengevaluasi akurasi menggunakan data kebenaran dasar.