Anda dapat menghosting model machine learning yang terlatih di cloud dan menggunakan AI Platform Prediction untuk menyimpulkan nilai target data baru. Halaman ini membahas hosting dan prediksi model serta memperkenalkan pertimbangan yang harus Anda ingat untuk project Anda.
Cara kerjanya
AI Platform Prediction mengelola resource komputasi di cloud untuk menjalankan model Anda. Anda dapat meminta prediksi dari model dan mendapatkan nilai target prediksi untuk model tersebut. Berikut adalah proses untuk menyiapkan prediksi di cloud:
Anda mengekspor model sebagai artefak yang dapat di-deploy ke AI Platform Prediction.
Anda membuat resource model di AI Platform Prediction, lalu membuat versi model dari model tersimpan.
Jika men-deploy rutinitas prediksi kustom, Anda juga harus menyediakan kode untuk dijalankan pada waktu prediksi.
Anda memformat data input untuk prediksi dan meminta prediksi online atau prediksi batch
Saat Anda menggunakan prediksi online, layanan akan menjalankan model tersimpan dan menampilkan prediksi yang diminta sebagai pesan respons untuk panggilan.
- Versi model Anda di-deploy di region yang Anda tentukan saat membuat model.
- Meskipun tidak dijamin, versi model yang Anda gunakan secara rutin umumnya selalu siap dijalankan.
Saat Anda menggunakan prediksi batch, yang hanya didukung untuk model TensorFlow, prosesnya sedikit lebih rumit:
Layanan prediksi mengalokasikan resource untuk menjalankan tugas Anda. Hal ini mencakup satu atau beberapa node prediksi.
Layanan ini memulihkan grafik TensorFlow Anda di setiap node yang dialokasikan.
Layanan prediksi mendistribusikan data input Anda di seluruh node yang dialokasikan.
Setiap node menjalankan grafik dan menyimpan prediksi ke lokasi Cloud Storage yang Anda tentukan.
Setelah semua data input diproses, layanan akan menonaktifkan tugas dan melepaskan resource yang dialokasikan untuknya.
Deployment model
AI Platform Prediction dapat menghosting model Anda sehingga Anda bisa mendapatkan prediksi dari model tersebut di cloud. Proses hosting model tersimpan disebut deployment. Layanan prediksi mengelola infrastruktur yang diperlukan untuk menjalankan model Anda dalam skala besar, dan menyediakannya untuk permintaan prediksi online dan batch. Bagian ini menjelaskan deployment model.
Tentang model dan versi
AI Platform Prediction mengatur model terlatih Anda menggunakan resource yang disebut
model dan versi. Model adalah solusi machine learning. Misalnya,
Anda dapat membuat model bernama census
untuk memuat semua pekerjaan Anda pada model machine learning sensus Amerika Serikat. Entitas yang Anda buat, bernama census
, adalah
penampung untuk implementasi aktual model machine learning, yang
disebut versi.
Mengembangkan model machine learning adalah proses berulang. Oleh karena itu, paradigma resource AI Platform Prediction disiapkan dengan asumsi bahwa Anda akan membuat beberapa versi dari setiap model machine learning. Terminologi ini dapat membingungkan karena resource model AI Platform Prediction sebenarnya bukan model machine learning itu sendiri. Di AI Platform Prediction, model adalah penampung untuk versi model machine learning.
Apa yang ada dalam versi?
"Model" yang Anda deploy ke AI Platform Prediction sebagai versi model terdiri dari satu atau beberapa artefak yang dihasilkan oleh pelatihan dengan framework yang dihosting, TensorFlow, scikit-learn, atau XGBoost. Tidak penting apakah Anda melatih model di cloud menggunakan AI Platform Training atau di tempat lain.
Anda juga dapat men-deploy rutinitas prediksi kustom (beta). Dalam hal ini, Anda dapat menyediakan versi model dengan artefak dan kode pelatihan tambahan untuk menangani permintaan prediksi.
Variasi antarversi
Versi yang Anda buat untuk resource model tertentu bersifat arbitrer; Anda dapat menggunakan resource model yang sama meskipun Anda sepenuhnya mengubah model machine learning di antara versi. Model adalah alat organisasi yang dapat Anda gunakan sesuai dengan situasi Anda.
Hal ini umum, terutama setelah Anda memiliki versi dalam produksi, untuk mempertahankan input dan output yang sama di antara versi model. Hal ini memungkinkan Anda beralih versi tanpa perlu mengubah struktur aplikasi lain yang mungkin telah Anda buat di sekitar model. Hal ini juga memudahkan pengujian versi baru dengan data yang ada.
Versi default
Setiap model dengan setidaknya satu versi memiliki versi default; versi default ditetapkan saat versi pertama dibuat. Jika Anda meminta prediksi yang hanya menentukan nama model, AI Platform Prediction akan menggunakan versi default untuk model tersebut.
Perhatikan bahwa satu-satunya waktu layanan otomatis menetapkan versi default adalah saat Anda membuat versi pertama. Anda dapat secara manual menjadikan versi berikutnya sebagai versi default dengan memanggil projects.models.versions.setDefault (juga ditampilkan sebagai gcloud ai-platform versions set-default
dan sebagai opsi dalam daftar Versi di halaman Detail model di konsol Google Cloud (buka halaman detail model dengan mengklik model Anda dalam daftar model di halaman Model). Hal ini
memungkinkan Anda, misalnya, menggunakan versi default yang stabil untuk menayangkan prediksi
dalam produksi sambil menguji versi yang lebih baru tanpa membuat resource model khusus
untuk pengujian.
Penamaan model dan versi
Nama model dan versi harus:
- Hanya berisi huruf besar/kecil, angka, dan garis bawah (peka huruf besar/kecil).
- Dimulai dengan huruf.
- Berisi 128 karakter atau kurang.
- Harus unik dalam project tertentu (untuk model) atau model (untuk versi).
Tidak ada aturan untuk nama selain persyaratan teknis tersebut, tetapi berikut beberapa praktik terbaik:
- Nama model harus deskriptif dan berbeda—Anda mungkin perlu memilihnya dari daftar banyak nama dalam log atau laporan.
- Sebaiknya nama versi dibuat singkat dan sederhana. Misalnya, lebih mudah untuk mengidentifikasi 'v1' dalam daftar resource daripada '2017_01_29T13_54_58'.
Batas model dan versi
Untuk mempelajari jumlah model dan versi yang dapat Anda buat dalam satu project Google Cloud, lihat Kuota resource.
Parameter deployment model
AI Platform Prediction memerlukan beberapa informasi untuk membuat versi model Anda.
Anda juga memiliki beberapa opsi yang dapat dikonfigurasi. Bagian ini menjelaskan
parameter dari kedua jenis tersebut. Parameter ini ditentukan dalam objek
Version
atau ditambahkan untuk memudahkan dalam perintah
gcloud ai-platform versions create
.
- Nama versi
- Nama untuk versi baru yang unik di antara nama versi model lainnya.
- Deskripsi
- Anda dapat memberikan deskripsi untuk versi Anda. Saat ini, deskripsi hanya diberikan saat Anda mendapatkan informasi versi dengan API; baik Google Cloud CLI maupun konsol Google Cloud tidak menampilkan deskripsi.
- URI Deployment
- Anda harus memberikan URI lokasi Cloud Storage tempat
SavedModel Anda disimpan. AI Platform Prediction mengambil model dari lokasi ini dan men-deploy-nya. Parameter ini disebut
--origin
dalam perintahgcloud ai-platform versions create
. Jika men-deploy rutinitas prediksi kustom (beta), Anda dapat memberikan URI direktori Cloud Storage yang berisi artefak apa pun yang digunakan versi model Anda untuk prediksi, bukan hanya SavedModel. - Versi runtime
- AI Platform Prediction menggunakan versi runtime stabil terbaru untuk men-deploy versi model Anda, kecuali jika Anda menentukan versi yang didukung yang berbeda. Versi runtime secara utama menentukan versi TensorFlow yang digunakan layanan prediksi untuk menjalankan model Anda. Saat menjalankan tugas prediksi batch, Anda memiliki opsi untuk mengganti versi runtime yang ditetapkan. Prediksi online selalu menggunakan versi runtime yang ditetapkan saat versi model di-deploy.
- Penskalaan manual
Anda dapat menentukan jumlah node prediksi yang akan terus berjalan untuk versi model. Lihat bagian tentang penskalaan untuk mengetahui informasi selengkapnya.
- Bucket staging
Jika menggunakan Google Cloud CLI untuk men-deploy model, Anda dapat menggunakan SavedModel di komputer lokal. Alat ini akan menyiapkannya di lokasi Cloud Storage yang Anda tentukan sebelum men-deploy-nya ke AI Platform Prediction.
Perubahan grafik untuk prediksi
Anda mungkin telah menyertakan TensorFlow Ops dalam grafik komputasi yang berguna terutama dalam konteks pelatihan. Setelah melatih model, Anda dapat menghapus operasi tersebut dari grafik sebelum mengekspor versi akhir.
Sebagian besar saran yang diberikan di halaman pengembangan aplikasi pelatihan ditujukan untuk pengalaman prediksi. Dalam beberapa kasus, perubahan tersebut adalah perubahan yang Anda buat pada model saat sebagian besar pelatihan selesai dan Anda siap mulai men-deploy versi.
Mendapatkan prediksi
Anda dapat mengirim data baru ke versi model yang di-deploy untuk mendapatkan prediksi. Bagian berikut menjelaskan pertimbangan prediksi yang penting.
Prediksi online versus prediksi batch
Pelajari perbedaan antara prediksi online dan batch.
Memahami node prediksi dan alokasi resource
AI Platform Prediction mengukur jumlah pemrosesan yang Anda gunakan untuk prediksi dalam jam kerja node. Bagian ini menjelaskan node ini dan cara dialokasikan untuk berbagai jenis prediksi.
Cara termudah untuk memahami node adalah sebagai virtual machine (VM), meskipun node tersebut diimplementasikan dengan mekanisme yang berbeda dari VM tradisional. Setiap node disediakan dengan jumlah daya pemrosesan dan memori yang ditetapkan. Image sistem juga memiliki image sistem operasi dan konfigurasi software yang ditetapkan yang diperlukan untuk menjalankan model Anda guna mendapatkan prediksi.
Prediksi online dan batch menjalankan node Anda dengan pemrosesan terdistribusi, sehingga permintaan atau tugas tertentu dapat menggunakan beberapa node secara bersamaan. Anda dikenai biaya untuk total penggunaan node per menit, menggunakan tarif per jam. Misalnya, menjalankan dua node selama sepuluh menit dikenai biaya yang sama dengan menjalankan satu node selama dua puluh menit. Prediksi online dan batch mengalokasikan node secara berbeda, yang dapat berdampak signifikan pada tagihan yang akan Anda terima.
Alokasi node untuk prediksi batch
Layanan prediksi batch menskalakan jumlah node yang digunakan, untuk meminimalkan jumlah waktu yang diperlukan tugas Anda. Untuk melakukannya, layanan:
Mengalokasikan beberapa node untuk menangani tugas Anda saat Anda memulainya.
Menskalakan jumlah node selama tugas dalam upaya untuk mengoptimalkan efisiensi. Setiap node memerlukan waktu untuk memulai, sehingga layanan mencoba mengalokasikan node secukupnya sehingga waktu startup diimbangi dengan pengurangan waktu yang berlalu.
Mematikan node segera setelah tugas Anda selesai.
Anda dapat memengaruhi penskalaan tugas prediksi batch dengan menentukan jumlah maksimum node yang akan digunakan. Anda biasanya menginginkan node sebanyak yang akan digunakan layanan, tetapi penggunaan node tunduk pada kebijakan kuota AI Platform Prediction. Sebaiknya batasi jumlah node yang dialokasikan ke tugas tertentu, terutama jika Anda membagikan project kepada orang lain dan berpotensi menjalankan tugas (baik pelatihan maupun prediksi) secara serentak.
Alokasi node untuk prediksi online
Layanan prediksi online menskalakan jumlah node yang digunakan, untuk memaksimalkan jumlah permintaan yang dapat ditangani tanpa menimbulkan terlalu banyak latensi. Untuk melakukannya, layanan:
Mengalokasikan beberapa node saat pertama kali Anda meminta prediksi setelah jeda yang lama dalam permintaan.
Menskalakan jumlah node sebagai respons terhadap traffic permintaan, menambahkan node saat traffic meningkat, dan menghapusnya saat ada lebih sedikit permintaan.
Mempertahankan setidaknya satu node siap selama beberapa menit, untuk menangani permintaan meskipun tidak ada yang harus ditangani. Status siap memastikan bahwa layanan dapat menayangkan setiap prediksi dengan segera.
Menskalakan ke nol setelah versi model Anda berjalan beberapa menit tanpa permintaan prediksi.
Setelah layanan diskalakan ke nol, atau saat terjadi lonjakan traffic secara tiba-tiba, perlu waktu (detik hingga menit) untuk melakukan inisialisasi node guna melayani permintaan. Waktu inisialisasi bergantung pada ukuran versi model Anda, sehingga waktu tunggu sisi klien dapat menyebabkan permintaan dihapus hingga node baru diinisialisasi, dan/atau meningkatkan latensi selama jangka waktu ini.
Untuk memastikan penayangan yang cepat setiap saat, Anda dapat menentukan jumlah minimum node
yang harus selalu siap oleh layanan, dengan menetapkan
opsi minNodes
pada versi model Anda. Setelan ini dapat meningkatkan biaya, karena Anda membayar node
meskipun tidak ada prediksi yang ditayangkan.
Batasan penskalaan otomatis
Penskalaan otomatis AI Platform Prediction untuk prediksi online dapat membantu Anda menayangkan berbagai tingkat permintaan prediksi sekaligus meminimalkan biaya. Namun, cara ini tidak ideal untuk semua situasi. Layanan mungkin tidak dapat membuat node online dengan cukup cepat untuk mengimbangi lonjakan traffic permintaan yang besar. Jika traffic Anda secara rutin mengalami lonjakan tajam, dan jika latensi yang rendah dan andal penting bagi aplikasi Anda, sebaiknya pertimbangkan penskalaan manual.
Menggunakan penskalaan manual
Anda dapat memengaruhi penskalaan prediksi online untuk versi model dengan menentukan jumlah node yang akan terus berjalan, berapa pun traffic-nya. Menetapkan jumlah node secara manual sebenarnya menghentikan penskalaan layanan, yang berarti jumlah node yang Anda tentukan akan selalu siap, dan Anda akan terus dikenai tagihan untuk node tersebut. Anda harus menghindari hal ini kecuali jika jumlah
permintaan yang diterima model Anda secara inheren berfluktuasi lebih cepat daripada penskalaan
otomatis yang dapat mengimbanginya. Anda menetapkan jumlah node yang akan digunakan dengan menetapkan
manualScaling
dalam objek
Version
yang Anda teruskan ke
projects.models.versions.create.
Penskalaan multi-zona
Jika versi Anda menggunakan jenis mesin Compute Engine (N1)
dan Anda menetapkan autoScaling.minNodes
atau manualScaling.nodes
ke 2 atau lebih tinggi
(bergantung pada apakah Anda menggunakan penskalaan otomatis atau manual), node
prediksi akan berjalan di beberapa zona di region yang sama. Hal ini memastikan
ketersediaan berkelanjutan jika terjadi pemadaman layanan di salah satu zona.
Data input prediksi
Data yang Anda gunakan untuk mendapatkan prediksi adalah data baru yang memiliki bentuk yang sama dengan data yang Anda gunakan untuk pelatihan. Prediksi online dan batch menggunakan data yang sama (fitur model Anda), tetapi memerlukan format yang berbeda, bergantung pada jenis prediksi dan antarmuka yang Anda gunakan. Format ini diturukan dalam tabel berikut, dan dijelaskan secara lebih mendetail di bagian di bawah:
Jenis dan antarmuka prediksi | Format input yang didukung |
---|---|
Batch dengan panggilan API | File teks dengan string instance JSON atau file TFRecord (dapat dikompresi) |
Batch dengan gcloud CLI | File teks dengan string instance JSON atau file TFRecord (dapat dikompresi) |
Online dengan panggilan API | Pesan permintaan JSON |
Online dengan gcloud CLI | File teks dengan string instance JSON atau file CSV |
String JSON instance
Format dasar untuk prediksi online dan batch adalah daftar tensor data instance. Ini dapat berupa daftar nilai biasa atau anggota objek JSON, bergantung pada cara Anda mengonfigurasi input dalam aplikasi pelatihan Anda:
Contoh ini menunjukkan tensor input dan kunci instance:
{"values": [1, 2, 3, 4], "key": 1}
Susunan string JSON bisa menjadi kompleks selama mengikuti aturan berikut:
Data instance tingkat teratas harus berupa objek JSON—kamus key-value pair.
Nilai individual dalam objek instance dapat berupa string, angka, atau daftar. Anda tidak dapat menyematkan objek JSON.
Daftar hanya boleh berisi item dari jenis yang sama (termasuk daftar lainnya). Anda tidak boleh mencampur nilai string dan numerik.
String berikut (diformat agar mudah dibaca) menunjukkan objek yang berisi label dan gambar, dengan gambar berupa array 3 dimensi dari bilangan bulat 8-bit:
{
"tag": "beach",
"image": [
[
[138, 30, 66],
[130, 20, 56],
...
],
[
[126, 38, 61],
[122, 24, 57],
...
],
...
]
}
Jika model hanya menggunakan satu input, Anda tidak perlu menggabungkannya dalam objek JSON. Misalnya, jika Anda mengirim satu tensor (vektor dalam hal ini) dengan empat nilai, Anda tidak perlu memformatnya seperti ini:
{"values": [1, 2, 3, 4]}
Anda cukup memformat setiap instance sebagai daftar:
[1, 2, 3, 4]
Data biner dalam input prediksi
Data biner tidak dapat diformat sebagai string berenkode UTF-8 yang didukung JSON. Jika Anda memiliki data biner dalam input, Anda harus menggunakan encoding base64 untuk merepresentasikannya. Diperlukan format khusus berikut:
String yang dienkode harus diformat sebagai objek JSON dengan satu kunci bernama
b64
. Contoh Python berikut mengenkode buffering data JPEG mentah menggunakan library base64 untuk membuat instance:{"image_bytes":{"b64": base64.b64encode(jpeg_data)}}
Dalam kode model TensorFlow, Anda harus memberi nama alias untuk tensor input dan output agar diakhiri dengan '_bytes'.
Data input prediksi online
Anda meneruskan instance input untuk prediksi online sebagai isi pesan untuk permintaan predict. Untuk pemformatan isi permintaan dan respons, lihat detail permintaan prediksi.
Singkatnya: Buat setiap instance menjadi item dalam daftar, dan beri nama anggota daftar
instances
. Jadi, contoh JSON instance data sederhana yang diberikan di atas menjadi:
{"instances": [{"values": [1, 2, 3, 4], "key": 1}]}
Saat menggunakan gcloud ai-platform projects predict
untuk meminta prediksi
online, Anda meneruskan file dengan format yang sama dengan yang Anda gunakan untuk prediksi
batch.
Data input prediksi batch
Anda memberikan data input untuk prediksi batch dalam satu atau beberapa file teks yang berisi baris data instance JSON seperti yang dijelaskan di atas. File input tidak berisi header kolom atau format lain selain sintaksis JSON sederhana.
{"image": [0.0, 0.0, ... ], "key": 0}
{"image": [0.0, 0.0, ... ], "key": 1}
{"image": [0.0, 0.0, ... ], "key": 2}
Kunci instance
AI Platform Prediction menjalankan tugas prediksi batch Anda menggunakan pemrosesan terdistribusi. Artinya, data Anda didistribusikan di antara cluster virtual machine acak, dan diproses dalam urutan yang tidak dapat diprediksi. Agar dapat mencocokkan prediksi yang ditampilkan dengan instance input, Anda harus menentukan kunci instance. Kunci instance adalah nilai yang dimiliki setiap instance yang unik di antara instance dalam kumpulan data. Kunci yang paling sederhana adalah nomor indeks.
Anda harus meneruskan kunci melalui grafik tanpa diubah dalam aplikasi pelatihan. Jika data Anda belum memiliki kunci instance, Anda dapat menambahkannya sebagai bagian dari prapemrosesan data.
Versi runtime
Saat versi baru AI Platform Prediction dirilis, ada kemungkinan model yang dikembangkan untuk versi lama akan menjadi usang. Hal ini terutama relevan jika Anda mendapatkan versi model yang efektif yang tetap tidak berubah selama jangka waktu yang lama. Anda harus meninjau kebijakan pembuatan versi AI Platform Prediction dan memastikan bahwa Anda memahami versi runtime AI Platform Prediction yang digunakan untuk melatih versi model.
Versi dan prediksi runtime
Anda harus menentukan versi runtime AI Platform Prediction yang didukung saat membuat versi model. Tindakan ini akan menetapkan setelan default versi model.
Anda dapat menentukan versi runtime yang akan digunakan saat memulai tugas prediksi batch. Hal ini untuk mengakomodasi mendapatkan prediksi menggunakan model yang tidak di-deploy di AI Platform Prediction. Untuk model yang di-deploy, gunakan versi runtime default model dalam permintaan tugas Anda. Penggunaan versi runtime yang berbeda kemungkinan akan menyebabkan error yang tidak terduga.
Anda tidak dapat meminta prediksi online dari model di luar AI Platform Prediction, sehingga tidak ada opsi untuk mengganti versi runtime default dalam permintaan Anda.
Versi runtime default yang ditetapkan untuk versi model tidak dapat diubah. Untuk menentukan versi runtime yang berbeda untuk versi model, deploy versi baru menggunakan artefak pelatihan yang sama dengan yang Anda gunakan pada awalnya.
Wilayah dan prediksi
Google Cloud menggunakan region, yang dibagi menjadi zona, untuk menentukan lokasi geografis dari resource komputasi fisik. Saat men-deploy model untuk prediksi menggunakan AI Platform Prediction, Anda menentukan region default tempat prediksi akan dijalankan.
Saat memulai tugas prediksi batch, Anda dapat menentukan region tempat tugas tersebut dijalankan, yang akan menggantikan region default. Prediksi online selalu ditayangkan dari region default yang ditentukan untuk model.
Untuk melihat region yang tersedia untuk layanan AI Platform Prediction, termasuk pelatihan model dan prediksi online/batch, baca panduan region.
Logging prediksi
Prediksi batch menghasilkan log tugas yang dapat Anda lihat di Cloud Logging. Anda juga bisa mendapatkan log untuk permintaan prediksi online jika mengonfigurasi model untuk membuatnya saat membuatnya. Perhatikan bahwa Anda harus menentukan opsi ini saat membuat resource model di AI Platform Prediction; semua versi model menghasilkan log untuk prediksi online, atau tidak ada yang menghasilkan log.
Anda dapat menetapkan logging prediksi online untuk model dengan menetapkan onlinePredictionLogging
ke true (True
di Python) di Resource model yang Anda gunakan saat membuat model dengan projects.models.create.
Jika Anda menggunakan Google Cloud CLI untuk membuat model, sertakan flag --enable-logging
saat menjalankan gcloud ai-platform models create
.
Mendapatkan prediksi dari model yang tidak di-deploy
Anda dapat meminta prediksi batch menggunakan model yang belum di-deploy ke layanan AI Platform Prediction. Daripada menentukan nama model atau versi, Anda dapat menggunakan URI lokasi Cloud Storage tempat model yang ingin dijalankan disimpan.
Karena model yang tidak di-deploy tidak memiliki versi runtime default yang ditetapkan, Anda harus menetapkannya secara eksplisit dalam permintaan tugas.
Dalam hal lain, tugas prediksi batch yang menggunakan model yang tidak di-deploy berperilaku seperti tugas batch lainnya.
Pengujian model
Anda dapat menggunakan layanan prediksi AI Platform Prediction untuk menghosting model yang sedang dalam produksi, tetapi Anda juga dapat menggunakannya untuk menguji model. Secara tradisional, pengujian model adalah langkah sebelum bersiap untuk men-deploy solusi machine learning. Tujuan lulus pengujian adalah untuk menguji model Anda di lingkungan yang sedekat mungkin dengan cara model tersebut akan digunakan dalam situasi dunia nyata.
Ingat bahwa Anda dapat memiliki beberapa versi model yang di-deploy secara bersamaan di layanan. Artinya, Anda dapat memiliki beberapa revisi model dalam pengujian sekaligus jika perlu. Hal ini juga memudahkan deployment versi produksi model saat menguji revisi berikutnya. Seperti halnya banyak pengembangan aplikasi machine learning, ketersediaan data baru sering kali menjadi faktor pembatas. Anda harus mengembangkan strategi untuk memisahkan data yang Anda miliki dan mengumpulkan data baru untuk digunakan dalam pengujian.
Langkah selanjutnya
Menyimpulkan nilai dari instance data baru dengan prediksi online.
Menyimpulkan nilai dari instance data baru dengan prediksi batch.