Mendapatkan prediksi batch

Jika tidak segera memerlukan prediksi, atau jika memiliki instance dalam jumlah besar untuk mendapatkan prediksi, Anda dapat menggunakan layanan prediksi batch. Halaman ini menjelaskan cara memulai tugas prediksi batch AI Platform Prediction. AI Platform Prediction hanya mendukung pengambilan prediksi batch dari model TensorFlow.

Pelajari prediksi online versus batch atau baca ringkasan konsep prediksi.

Sebelum memulai

Untuk meminta prediksi, Anda harus terlebih dahulu:

  • Buat resource model dan resource versi atau masukkan TensorFlowSavedModel di lokasi Cloud Storage yang dapat diakses project Anda.

    • Jika memilih untuk menggunakan resource versi untuk prediksi batch, Anda harus membuat versi dengan jenis mesin mls1-c1-m2.
  • Siapkan lokasi Cloud Storage yang dapat diakses project Anda untuk:

    • File data input. Ini dapat berupa beberapa lokasi, dan project Anda harus diizinkan untuk membaca dari setiap lokasi tersebut.

    • File output. Anda hanya dapat menentukan satu jalur output dan project Anda harus diberi otorisasi untuk menulis data ke jalur tersebut.

  • Pastikan file input Anda memiliki format yang benar untuk prediksi batch.

Mengonfigurasi tugas prediksi batch

Untuk memulai tugas prediksi batch, Anda harus mengumpulkan beberapa data konfigurasi. Ini adalah data yang sama yang terkandung dalam objek PredictionInput yang Anda gunakan ketika memanggil API secara langsung:

Format data

Jenis format input yang Anda gunakan untuk file input. Semua file input untuk tugas tertentu harus menggunakan format data yang sama. Tetapkan ke salah satu nilai berikut:

JSON

File input Anda adalah teks biasa dengan instance di setiap baris. Ini adalah format yang dijelaskan di halaman konsep prediksi.

TF_RECORD

File input Anda menggunakan format TFRecord TensorFlow.

TF_RECORD_GZIP

File input Anda adalah file TFRecord yang dikompresi GZIP.

Jalur input

URI file data input Anda, yang harus berada di lokasi Cloud Storage. Anda dapat menentukan:

  • Jalur ke file tertentu: 'gs://path/to/my/input/file.json'.

  • Jalur ke direktori dengan karakter pengganti tanda bintang tunggal, untuk menunjukkan semua file dalam direktori tersebut: 'gs://path/to/my/input/*'.

  • Jalur ke nama file parsial dengan karakter pengganti tanda bintang tunggal di bagian akhir, untuk menunjukkan semua file yang dimulai dengan urutan yang disediakan: 'gs://path/to/my/input/file*'.

Anda dapat menggabungkan beberapa URI. Di Python, Anda membuat daftarnya. Jika menggunakan Google Cloud CLI, atau memanggil API secara langsung, Anda dapat mencantumkan beberapa URI, yang dipisahkan dengan koma, tetapi tanpa spasi di antaranya. Ini adalah format yang tepat untuk flag --input-paths:

 --input-paths gs://a/directory/of/files/*,gs://a/single/specific/file.json,gs://a/file/template/data*
Jalur output

Jalur ke lokasi Cloud Storage tempat Anda ingin layanan prediksi menyimpan hasil. Project Anda harus memiliki izin untuk menulis ke lokasi ini.

Nama model dan nama versi

Nama model dan, secara opsional, versi yang ingin Anda dapatkan prediksinya. Jika Anda tidak menentukan versi, versi default model akan digunakan. Untuk prediksi batch, versi tersebut harus menggunakan jenis mesin mls1-c1-m2.

Jika Anda memberikan URI Model (lihat bagian berikut), hapus kolom ini.

URI Model

Anda bisa mendapatkan prediksi dari model yang tidak di-deploy pada AI Platform Prediction dengan menentukan URISavedModel yang ingin Anda gunakan. SaveModel harus disimpan di Cloud Storage.

Singkatnya, Anda memiliki tiga opsi untuk menentukan model yang akan digunakan untuk prediksi batch. Anda dapat menggunakan:

  • Nama model saja menggunakan versi default model.

  • Nama model dan versi yang akan menggunakan versi model tertentu.

  • URI model untuk menggunakanSavedModel yang ada di Cloud Storage, tetapi tidak di-deploy ke AI Platform Prediction.

Region

Region Google Compute Engine tempat Anda ingin menjalankan tugas. Untuk mendapatkan performa terbaik, Anda harus menjalankan tugas prediksi dan menyimpan data input dan output di region yang sama, terutama untuk set data yang sangat besar. Prediksi batch AI Platform Prediction tersedia di region berikut:

  -   us-central1
  -   us-east1
  -   europe-west1
  -   asia-east1

Untuk sepenuhnya memahami region yang tersedia untuk layanan AI Platform Prediction, termasuk pelatihan model dan prediksi online, baca panduan untuk region.

Nama Tugas

Nama pekerjaan Anda, yang harus:

  • Hanya berisi huruf, angka, dan garis bawah campuran (peka huruf besar/kecil).
  • Awali dengan huruf.
  • Berisi tidak lebih dari 128 karakter.
  • Bersikap unik di antara semua nama tugas pelatihan dan prediksi batch yang pernah digunakan dalam project Anda. Ini termasuk semua pekerjaan yang Anda buat di proyek Anda, terlepas dari keberhasilan atau status mereka.
Ukuran tumpukan (opsional)

Jumlah data per batch. Layanan akan menyanggah batch_size data dalam memori sebelum memanggil model Anda. Jika tidak ditentukan, defaultnya adalah 64.

Label (opsional)

Anda dapat menambahkan label ke tugas untuk mengatur dan mengurutkan tugas ke dalam kategori saat melihat atau memantau resource. Misalnya, Anda dapat mengurutkan tugas berdasarkan tim (dengan menambahkan label seperti engineering atau research) atau berdasarkan fase pengembangan (prod atau test). Untuk menambahkan label ke tugas prediksi, berikan daftar pasangan KEY=VALUE.

Jumlah pekerja maksimum (opsional)

Jumlah maksimum node prediksi yang akan digunakan dalam cluster pemrosesan untuk tugas ini. Ini adalah cara yang Anda gunakan untuk menetapkan batas maksimum pada fitur penskalaan otomatis prediksi batch. Jika Anda tidak menentukan nilai, nilai defaultnya adalah 10. Terlepas dari nilai yang Anda tentukan, penskalaan dibatasi oleh kuota node prediksi.

Versi runtime (opsional)

Versi AI Platform Prediction yang akan digunakan untuk tugas. Opsi ini disertakan sehingga Anda dapat menentukan versi runtime yang akan digunakan dengan model yang tidak di-deploy di AI Platform Prediction. Anda harus selalu menghilangkan nilai ini untuk versi model yang di-deploy, yang memberi tahu layanan untuk menggunakan versi yang sama dengan yang ditentukan saat versi model di-deploy.

Nama tanda tangan (opsional)

Jika model tersimpan Anda memiliki beberapa tanda tangan, gunakan opsi ini untuk menentukan nama tanda tangan TensorFlow kustom, yang memungkinkan Anda memilih peta input/output alternatif yang ditentukan dalam TensorFlowSavedModel. Lihat dokumentasi TensorFlow terkait SavedModel untuk panduan penggunaan tanda tangan, dan panduan untuk menentukan output model kustom. Defaultnya adalah DEFAULT_SERVING_SIGNATURE_DEF_KEY, yang memiliki nilai serving_default.

Contoh berikut menentukan variabel untuk menyimpan data konfigurasi.

gcloud

Anda tidak perlu membuat variabel saat menggunakan alat command line gcloud untuk memulai tugas. Namun, melakukannya di sini membuat perintah pengiriman tugas jauh lebih mudah untuk dimasukkan dan dibaca.

DATA_FORMAT="text" # JSON data format
INPUT_PATHS='gs://path/to/your/input/data/*'
OUTPUT_PATH='gs://your/desired/output/location'
MODEL_NAME='census'
VERSION_NAME='v1'
REGION='us-east1'
now=$(date +"%Y%m%d_%H%M%S")
JOB_NAME="census_batch_predict_$now"
MAX_WORKER_COUNT="20"
BATCH_SIZE="32"
LABELS="team=engineering,phase=test,owner=sara"

Python

Saat menggunakan Library Klien Google API untuk Python, Anda dapat menggunakan kamus Python untuk merepresentasikan resource Job dan PredictionInput.

  1. Format nama project dan nama model atau versi Anda dengan sintaksis yang digunakan oleh AI Platform Prediction REST API:

    • project_name -> 'projects/project_name'
    • model_name -> 'projects/project_name/models/model_name'
    • version_name -> 'projects/project_name/models/model_name/versions/version_name'
  2. Buat kamus untuk resource Pekerjaan dan isi dengan dua item:

    • Kunci bernama 'jobId' dengan nama tugas yang ingin Anda gunakan sebagai nilainya.

    • Kunci bernama 'predictionInput' yang berisi objek kamus lain yang menampung semua anggota PredictionInput yang diperlukan dan anggota opsional yang ingin Anda gunakan.

    Contoh berikut menunjukkan fungsi yang mengambil informasi konfigurasi sebagai variabel input dan menampilkan isi permintaan prediksi. Selain dasar-dasar tersebut, contoh tersebut juga menghasilkan ID tugas yang unik berdasarkan nama project, nama model, dan waktu saat ini.

    import time
    import re
    
    def make_batch_job_body(project_name, input_paths, output_path,
            model_name, region, data_format='JSON',
            version_name=None, max_worker_count=None,
            runtime_version=None):
    
        project_id = 'projects/{}'.format(project_name)
        model_id = '{}/models/{}'.format(project_id, model_name)
        if version_name:
            version_id = '{}/versions/{}'.format(model_id, version_name)
    
        # Make a jobName of the format "model_name_batch_predict_YYYYMMDD_HHMMSS"
        timestamp = time.strftime('%Y%m%d_%H%M%S', time.gmtime())
    
        # Make sure the project name is formatted correctly to work as the basis
        # of a valid job name.
        clean_project_name = re.sub(r'\W+', '_', project_name)
    
        job_id = '{}_{}_{}'.format(clean_project_name, model_name,
                               timestamp)
    
        # Start building the request dictionary with required information.
        body = {'jobId': job_id,
                'predictionInput': {
                    'dataFormat': data_format,
                    'inputPaths': input_paths,
                    'outputPath': output_path,
                    'region': region}}
    
        # Use the version if present, the model (its default version) if not.
        if version_name:
            body['predictionInput']['versionName'] = version_id
        else:
            body['predictionInput']['modelName'] = model_id
    
        # Only include a maximum number of workers or a runtime version if specified.
        # Otherwise let the service use its defaults.
        if max_worker_count:
            body['predictionInput']['maxWorkerCount'] = max_worker_count
    
        if runtime_version:
            body['predictionInput']['runtimeVersion'] = runtime_version
    
        return body
    

Mengirim tugas prediksi batch

Anda dapat mengirimkan tugas dengan mudah ke projects.jobs.create atau alat command line yang setara, yaitu gcloud ai-platform jobs submit prediksi.

gcloud

Contoh berikut menggunakan variabel yang ditentukan di bagian sebelumnya untuk memulai prediksi batch.

gcloud ai-platform jobs submit prediction $JOB_NAME \
    --model $MODEL_NAME \
    --input-paths $INPUT_PATHS \
    --output-path $OUTPUT_PATH \
    --region $REGION \
    --data-format $DATA_FORMAT

Python

Memulai tugas prediksi batch dengan Library Klien Google API untuk Python mengikuti pola yang serupa dengan prosedur SDK klien lainnya:

  1. Siapkan isi permintaan yang akan digunakan untuk panggilan (ini ditunjukkan di bagian sebelumnya).

  2. Buat permintaan dengan memanggil ml.projects.jobs.create.

  3. Jalankan pemanggilan pada permintaan untuk mendapatkan respons, pastikan untuk memeriksa error HTTP.

  4. Gunakan respons sebagai kamus untuk mendapatkan nilai dari resource Job.

Anda dapat menggunakan Library Klien Google API untuk Python untuk memanggil AI Platform Training and Prediction API tanpa membuat permintaan HTTP secara manual. Sebelum menjalankan contoh kode berikut, Anda harus menyiapkan autentikasi.

    import googleapiclient.discovery as discovery

    project_id = 'projects/{}'.format(project_name)

    ml = discovery.build('ml', 'v1')
    request = ml.projects().jobs().create(parent=project_id,
                                          body=batch_predict_body)

    try:
        response = request.execute()

        print('Job requested.')

        # The state returned will almost always be QUEUED.
        print('state : {}'.format(response['state']))

    except errors.HttpError as err:
        # Something went wrong, print out some information.
        print('There was an error getting the prediction results.' +
              'Check the details:')
        print(err._get_reason())

Memantau tugas prediksi batch Anda

Tugas prediksi batch dapat memerlukan waktu lama untuk diselesaikan. Anda dapat memantau progres pekerjaan menggunakan Google Cloud Console:

  1. Buka halaman Tugas Prediksi AI Platform di Konsol Google Cloud:

    Buka halaman Tugas di konsol Google Cloud

  2. Klik nama pekerjaan Anda di daftar ID Pekerjaan. Tindakan ini akan membuka halaman Detail tugas.

  3. Status saat ini ditampilkan dengan nama pekerjaan di bagian atas halaman.

  4. Jika ingin mengetahui detail selengkapnya, Anda dapat mengklik View logs untuk melihat entri tugas Anda di Cloud Logging.

Ada cara lain untuk melacak progres tugas prediksi batch Anda. Keduanya mengikuti pola yang sama dengan memantau tugas pelatihan. Anda akan menemukan informasi selengkapnya di halaman yang menjelaskan cara memantau tugas pelatihan. Anda mungkin perlu sedikit menyesuaikan petunjuk agar dapat menangani tugas prediksi, tetapi mekanismenya sama.

Mendapatkan hasil prediksi

Layanan menulis prediksi ke lokasi Cloud Storage yang Anda tentukan. Ada dua jenis output file yang mungkin menyertakan hasil yang menarik:

  • File bernama prediction.errors_stats-NNNNN-of-NNNNN berisi informasi tentang masalah yang dialami selama tugas.

  • File JSON Lines yang bernama prediction.results-NNNNN-of-NNNNN berisi prediksi itu sendiri, seperti yang ditetapkan oleh output model Anda.

Nama file mencakup nomor indeks (ditampilkan di atas sebagai 'N' untuk setiap digit) yang menunjukkan jumlah total file yang harus Anda temukan. Misalnya, tugas yang memiliki enam file hasil menyertakan prediction.results-00000-of-00006 hingga prediction.results-00005-of-00006.

Setiap baris dari setiap file prediksi adalah objek JSON yang mewakili satu hasil prediksi. Anda dapat membuka file prediksi dengan pilihan editor teks. Untuk sekilas melihat command line, Anda dapat menggunakan gsutil cat:

gsutil cat $OUTPUT_PATH/prediction.results-NNNNN-of-NNNNN|less

Perlu diingat bahwa hasil prediksi Anda biasanya tidak di-output dalam urutan yang sama dengan instance input, meskipun Anda hanya menggunakan satu file input. Anda dapat menemukan prediksi untuk instance dengan mencocokkan kunci instance.

Langkah Berikutnya