Mendapatkan prediksi batch

Jika tidak memerlukan prediksi segera, atau jika Anda memiliki sejumlah besar instance 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 mendapatkan 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 tempatkan SavedModel TensorFlow 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 oleh project Anda untuk:

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

    • 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 dalam 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 dengan yang terdapat dalam objek PredictionInput yang Anda gunakan saat 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 dengan 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 satu karakter pengganti tanda bintang, untuk menunjukkan semua file dalam direktori tersebut: 'gs://path/to/my/input/*'.

  • Jalur ke nama file parsial dengan satu karakter pengganti tanda bintang di akhir, untuk menunjukkan semua file yang dimulai dengan urutan yang diberikan: '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 koma, tetapi tanpa spasi di antaranya. Ini adalah format yang tepat untuk tanda --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 gunakan untuk mendapatkan prediksi. Jika Anda tidak menentukan versi, versi default model akan digunakan. Untuk prediksi batch, versi 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 di AI Platform Prediction dengan menentukan URI SavedModel yang ingin digunakan. SavedModel harus disimpan di Cloud Storage.

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

  • Nama model itu sendiri untuk menggunakan versi default model.

  • Nama model dan versi untuk menggunakan versi model tertentu.

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

Wilayah

Region Google Compute Engine tempat Anda ingin menjalankan tugas. Untuk 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 wilayah 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 region.

Nama Tugas

Nama untuk tugas Anda, yang harus:

  • Hanya berisi huruf, angka, dan garis bawah dengan huruf besar/kecil (peka huruf besar/kecil).
  • Awali dengan huruf.
  • Tidak boleh berisi lebih dari 128 karakter.
  • Unik di antara semua nama tugas pelatihan dan prediksi batch yang pernah digunakan dalam project Anda. Hal ini mencakup semua tugas yang Anda buat dalam project, terlepas dari keberhasilan atau statusnya.
Ukuran batch (opsional)

Jumlah data per batch. Layanan akan melakukan buffering jumlah data batch_size dalam memori sebelum memanggil model Anda. Jika tidak ditentukan, setelan 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 menurut tim (dengan menambahkan label seperti engineering atau research) atau menurut 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 di cluster pemrosesan untuk tugas ini. Ini adalah cara Anda untuk menetapkan batas atas 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 agar 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 sinyal kepada 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 SavedModel TensorFlow. Lihat dokumentasi TensorFlow tentang SavedModel untuk panduan menggunakan 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 akan membuat perintah pengiriman tugas jauh lebih mudah 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 Tugas 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 menyimpan semua anggota yang diperlukan dari PredictionInput, dan anggota opsional apa pun yang ingin Anda gunakan.

    Contoh berikut menunjukkan fungsi yang menggunakan informasi konfigurasi sebagai variabel input dan menampilkan isi permintaan prediksi. Selain dasar-dasarnya, contoh ini juga menghasilkan ID tugas 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

Mengirimkan tugas adalah panggilan sederhana ke projects.jobs.create atau alat command line yang setara, gcloud ai-platform jobs submit prediction.

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 ditampilkan di bagian sebelumnya).

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

  3. Panggil eksekusi pada permintaan untuk mendapatkan respons, pastikan untuk memeriksa error HTTP.

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

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

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

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

    Buka halaman Tugas di konsol Google Cloud

  2. Klik nama tugas Anda dalam daftar ID Tugas. Tindakan ini akan membuka halaman Detail tugas.

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

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

Ada cara lain untuk melacak progres tugas prediksi batch Anda. Tugas ini 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 di sana agar berfungsi dengan tugas prediksi, tetapi mekanismenya sama.

Mendapatkan hasil prediksi

Layanan ini 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 ditemukan selama tugas.

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

Nama file menyertakan nomor indeks (ditampilkan di atas sebagai 'N' untuk setiap digit) yang mencatat jumlah total file yang akan Anda temukan. Misalnya, tugas yang memiliki enam file hasil mencakup 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 editor teks pilihan Anda. Untuk melihat sekilas command line, Anda dapat menggunakan gcloud storage cat:

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

Perlu diingat bahwa hasil prediksi biasanya tidak dihasilkan 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