Optimalkan biaya fungsi AI dengan distilasi model.

Dokumen ini menjelaskan cara menggunakan mode yang dioptimalkan untuk fungsi AI terkelola di BigQuery. Anda dapat menggunakan mode yang dioptimalkan untuk memproses set data skala besar yang berisi ribuan, atau bahkan miliaran baris dengan konsumsi token model bahasa besar (LLM) dan latensi kueri yang berkurang secara signifikan dibandingkan dengan inferensi LLM per baris standar. Pengoptimalan ini hanya berlaku untuk fungsi AI.IF dan AI.CLASSIFY.

Jika Anda ingin menetapkan batas pada total konsumsi token untuk mencegah pembengkakan anggaran, bukan mengoptimalkan efisiensi token kueri Anda, lihat Mengontrol biaya dengan kuota token.

Untuk lebih memahami konsumsi token Anda, Anda dapat melihat jumlah token yang digunakan oleh sebuah kueri diGoogle Cloud konsol. Untuk memperkirakan penggunaan ini sebelum Anda menjalankan kueri, gunakan fungsi AI.COUNT_TOKENS.

Contoh berikut menunjukkan cara menggunakan fungsi AI.IF dengan mode yang dioptimalkan untuk mengidentifikasi artikel berita tentang bencana alam, menggunakan text-embedding-005 sebagai model penyematan:

SELECT
  title,
  body,
  AI.IF(
    ('The following news story is about a natural disaster: ', body),
    embeddings => AI.EMBED(body, endpoint => 'text-embedding-005', task_type => 'CLASSIFICATION').result,
    -- Optional, 'MINIMIZE_COST' is the default when embeddings are provided.
    optimization_mode => 'MINIMIZE_COST'
   ) AS is_natural_disaster
FROM
  `bigquery-public-data.bbc_news.fulltext`;

Argumen optimization_mode => 'MINIMIZE_COST' mengaktifkan mode yang dioptimalkan. Ini adalah setelan default saat sematan disediakan, sehingga Anda dapat menghilangkan argumen ini.

Untuk contoh ini, embedding dibuat secara langsung. Dalam praktiknya, sebaiknya Anda mewujudkan penyematan agar dapat digunakan kembali.

Cara kerja mode yang dioptimalkan

Fungsi AI terkelola, AI.IF dan AI.CLASSIFY, biasanya memanggil LLM jarak jauh untuk setiap baris dalam set data Anda. Saat Anda menggunakan mode yang dioptimalkan, BigQuery secara otomatis melatih model ringan yang disuling selama eksekusi kueri.

Prosesnya berjalan sebagai berikut:

Alur kerja fungsi AI saat mode yang dioptimalkan diaktifkan

  • Pengambilan Sampel dan Pelabelan: BigQuery memilih sampel kecil yang representatif dari data Anda dan memanggil Gemini untuk memberikan label.
  • Pelatihan model yang disuling: sebuah model suling lokal dilatih tepat waktu menggunakan label LLM dan embedding data sebagai fitur.
  • Pemeriksaan kualitas: BigQuery mengevaluasi akurasi model yang telah disaring terhadap hasil LLM. Secara default, jika model hasil penyulingan gagal memenuhi ambang kualitas yang dibutuhkan, kueri akan gagal dengan kesalahan yang menjelaskan mengapa model tersebut dibuang. Jika kualitas model dapat diterima, BigQuery mungkin masih melakukan penggantian ke LLM jarak jauh untuk baris tertentu guna mempertahankan kualitas yang konsisten, atau untuk baris yang tidak memiliki sematan yang valid.
  • Inferensi: model yang didistilasi memproses sebagian besar baris, sehingga mengurangi jumlah panggilan Gemini secara signifikan.

Batasan

Mode yang dioptimalkan memiliki batasan berikut:

  • Jumlah baris minimum: input ke fungsi AI harus berisi sekitar 3.000 baris untuk memastikan data yang cukup untuk pelatihan model.
  • Jenis data: untuk perintah yang mereferensikan beberapa kolom, hanya kolom string yang didukung untuk pengoptimalan.
  • Klasifikasi multi-label: AI.CLASSIFY dengan output_mode => 'multi' tidak didukung dalam mode yang dioptimalkan.
  • Dukungan fungsi: hanya fungsi AI.IF dan AI.CLASSIFY yang mendukung mode optimalisasi; namun, ketika menggunakan mode optimalisasi dengan AI.CLASSIFY, kueri dapat gagal jika kualitas model yang disuling tidak mencukupi.
  • Rasio error: Argumen max_error_ratio tidak didukung dalam mode yang dioptimalkan.

Sebelum memulai

Untuk mendapatkan izin yang diperlukan untuk menjalankan fungsi AI terkelola di BigQuery, lihat Menetapkan izin untuk fungsi AI generatif yang memanggil LLM Gemini Enterprise Agent Platform.

Pilih model penyematan

Untuk menggunakan mode yang dioptimalkan, Anda harus menghitung embedding untuk data Anda dan memberikannya ke fungsi AI. Agar kolom input memiliki embedding terkait, semua baris harus memiliki dimensi embedding yang konsisten dan dibuat oleh model embedding yang sama.

Untuk rasio biaya-kualitas dan skalabilitas terbaik, kami merekomendasikan untuk menghitung embedding untuk data Anda menggunakan model embedding, seperti text-embedding-005 atau embedding Gemini untuk tugas berbahasa Inggris atau multibahasa. Untuk data multimodal (teks dan gambar), kami merekomendasikan penggunaan model embedding multimodal seperti, Gemini Embedding 2 (gemini-embedding-2).

Membuat embedding

Anda dapat menghitung embedding untuk data Anda menggunakan pembuatan otomatis yang dikelola oleh BigQuery, atau dengan membuat kolom embedding secara manual. Bagian berikut menjelaskan cara menggunakan kedua pendekatan tersebut dengan fungsi AI.CLASSIFY dan AI.IF.

Pembuatan embedding otonom

Jika Anda menggunakan pembuatan embedding otonom, BigQuery akan otomatis menggunakan embedding saat AI.IF atau AI.CLASSIFY dipanggil. Ini adalah pendekatan yang direkomendasikan, tetapi terbatas pada satu kolom sematan per tabel.

Contoh berikut membuat tabel dengan kolom embedding yang dibuat secara mandiri, menggunakan text-embedding-005 sebagai model embedding, lalu menggunakan fungsi AI.CLASSIFY untuk mengategorikan data:

-- Create a table with an autonomously generated embedding column
CREATE TABLE my_dataset.bbc_news (
  title STRING,
  body STRING,
  body_embedding STRUCT<result ARRAY<FLOAT64>, status STRING>
    GENERATED ALWAYS AS (
      AI.EMBED(
        body,
        connection_id => '<my_connection_id>',
        task_type => 'CLASSIFICATION',
        endpoint => 'text-embedding-005')
    ) STORED
    OPTIONS(asynchronous = TRUE)
);

-- Insert data into the table
INSERT INTO my_dataset.bbc_news (title, body)
SELECT title, body FROM `bigquery-public-data.bbc_news.fulltext`;

-- Run the optimized query.
-- Wait for the background job to finish generating embeddings before running.
SELECT
  title,
  body,
  AI.CLASSIFY(
    body,
    categories => ['tech', 'sport', 'business', 'other']
  ) AS category
FROM
  my_dataset.bbc_news;

Spesifikasi kolom manual

Jika Anda memiliki kolom penyematan yang sudah ada, tentukan kolom tersebut dalam argumen embeddings dari AI.IF atau AI.CLASSIFY. Anda dapat membuatnya menggunakan fungsi AI.EMBED.

Contoh berikut menunjukkan cara membuat tabel dengan kolom embedding, menggunakan text-embedding-005 sebagai model embedding, lalu menggunakan kolom tersebut dalam kueri AI.CLASSIFY:

-- Create a table with an embedding column
CREATE TABLE my_dataset.bbc_news AS
SELECT
  title,
  body,
  AI.EMBED(
    body,
    endpoint => 'text-embedding-005',
    task_type => 'CLASSIFICATION'
  ).result AS body_embedding
FROM
  `bigquery-public-data.bbc_news.fulltext`;

-- Run the optimized query
SELECT
  title,
  body,
  AI.CLASSIFY(
    body,
    categories => ['tech', 'sport', 'business', 'other'],
    embeddings => body_embedding,
  ) AS category
FROM
  my_dataset.bbc_news;

Jika perintah Anda merujuk pada beberapa kolom, berikan daftar nama kolom dan embedding yang sesuai di argumen embeddings. Contoh: embeddings => [('body', body_embedding), ('title', title_embedding)].

Memantau pengoptimalan kueri

Untuk memverifikasi jumlah baris yang dioptimalkan selama eksekusi kueri, Anda dapat melihat statistik eksekusi di konsol Google Cloud atau melalui API:

Konsol

Untuk melihat jumlah baris yang dioptimalkan dan melihat pesan sistem tentang status pengoptimalan, lakukan hal berikut:

  1. Di konsol Google Cloud , buka halaman BigQuery.

    Buka BigQuery

  2. Di menu navigasi, klik Penjelajah tugas.

  3. Klik ID tugas untuk melihat panel Detail tugas.

  4. Klik tab Job information dan lihat metrik serta status di kolom Pengoptimalan fungsi AI generatif.

    Kolom pengoptimalan fungsi AI generatif di tab informasi tugas

API

Periksa FunctionGenAiCostOptimizationStats di objek GenAIFunctionStats metadata tugas. Objek ini mencakup jumlah baris yang disimpulkan melalui alur kerja yang dioptimalkan dan pesan yang dihasilkan sistem yang memberikan wawasan tentang status optimasi.

Memecahkan masalah

Bagian berikut menjelaskan cara mendiagnosis dan menyelesaikan masalah umum terkait penggunaan mode yang dioptimalkan.

Ukuran data terlalu kecil

Masalah: Data tidak mencukupi untuk pelatihan model. Anda mungkin melihat pesan error berikut: Fail to apply cost optimization because the data size is too small.

Solusi: Tingkatkan ukuran input Anda hingga sekitar 3.000 baris dan verifikasi bahwa sematan yang valid telah dibuat dengan benar untuk semua baris.

Sedikit atau tidak ada sampel di beberapa kelas

Masalah: Jumlah sampel yang tidak memadai untuk kategori tertentu selama fase pengambilan sampel, yang mencegah pelatihan model. Anda mungkin melihat pesan error berikut: Fail to apply cost optimization because some classes have few or no samples.

Solusi:

  • Hapus kategori langka atau kosong dari panggilan fungsi AI.CLASSIFY.
  • Kelompokkan kategori langka ke dalam kategori yang lebih luas untuk meningkatkan ukuran sampel. Anda dapat menggunakan kategori OTHER untuk mengelompokkan item yang tidak tercakup dalam kategori yang lebih spesifik. Namun, jangan tambahkan OTHER jika daftar kategori Anda sudah lengkap, karena istilah ini ambigu dan dapat menyebabkan kebingungan.

Embedding memiliki dimensi yang tidak konsisten.

Masalah: Inkonsistensi antara dimensi penyematan di seluruh baris. Anda mungkin melihat pesan error berikut: Fail to apply cost optimization because the embeddings have inconsistent dimensions.

Solusi: Pastikan bahwa embedding dibuat oleh model yang sama dan memiliki panjang vektor embedding yang sama. Anda dapat menggunakan kueri SQL yang mirip dengan berikut untuk memeriksa apakah embedding dalam kolom memiliki panjang yang sama:

SELECT ARRAY_LENGTH(body_embedding.result), COUNT(*)
FROM `PROJECT_ID.DATASET.TABLE_NAME`
GROUP BY 1;

Kompleksitas perintah terlalu tinggi

Masalah: Model yang disuling tidak dapat mencapai batas akurasi yang tinggi. Anda mungkin melihat pesan kesalahan berikut: Fail to apply cost optimization because the prompt complexity is too high.

Solusi:

  • Gunakan serangkaian kategori yang membentuk partisi. Pastikan kategori-kategori tersebut memiliki tumpang tindih seminimal mungkin dan mencakup semua kemungkinan masukan.

    • Hindari kategori yang tumpang tindih di mana suatu input mungkin termasuk dalam beberapa kategori secara bersamaan. Misalnya, hindari kategori seperti ['terrible', 'bad', 'okay', 'good', 'excellent'].
    • Hindari bagian yang tidak memiliki kategori yang berlaku. Misalnya, daftar kategori ['bad', 'average'] tidak mencakup ulasan yang memuji.
    • Berikan deskripsi kategori untuk memandu LLM dalam menyelesaikan ambiguitas antar kategori. Contoh:

      AI.CLASSIFY(
        review,
        categories => [
          ('terrible', 'Review where customer was not happy and the message indicates they will never try this product again'),
          ('bad', 'Review where customer was not happy but suggested improvements to the product'),
          ('okay', 'Review where customer was neutral about the product. Short reviews qualify for this category'),
          ('good', 'Review where customers were happy using this product but had minor critiques'),
          ('excellent', 'Review where customers were very happy using this product and will recommend others to try it too')],
        embeddings => review_embeddings)
      
  • Cobalah model embedding yang lebih canggih seperti text-embedding-005 atau gemini-embedding-2.

  • Hubungi bqml-feedback@google.com untuk mendapatkan bantuan tambahan dalam men-debug.

Jumlah baris yang diproses oleh LLM tidak terduga.

Masalah: Statistik eksekusi kueri menunjukkan bahwa jumlah baris yang diproses oleh LLM jarak jauh lebih tinggi dari yang diperkirakan, bukan model yang disuling. Hal ini mungkin disebabkan oleh alasan-alasan berikut:

  • Model yang telah disuling berhasil dilatih, tetapi beberapa baris memiliki embedding yang hilang. Baris-baris ini diproses oleh LLM jarak jauh.
  • Model yang disuling tidak dapat diterapkan untuk setiap baris dan harus kembali ke LLM jarak jauh untuk menjaga kualitas yang konsisten.

Solusi: Verifikasi bahwa embedding dihasilkan dengan benar dan valid untuk semua baris dalam data Anda. Jika masalah berlanjut, hubungi bqml-feedback@google.com untuk proses penelusuran masalah.

Kolom penyematan otonom tidak terdeteksi

Masalah: BigQuery tidak dapat mendeteksi kolom penyematan mandiri. Hal ini dapat terjadi jika skrip Anda menggunakan tabel sementara, dan referensi ke tabel asli hilang.

Solusi: Gunakan parameter embeddings untuk secara eksplisit meneruskan kolom penyematan otonom—misalnya, embeddings => content_embedding.result—yang memicu optimasi biaya.

Langkah berikutnya