Bermigrasi dari Vertex AI Feature Store (Lama) ke Bigtable

Memigrasikan beban kerja pengelolaan fitur machine learning dari Vertex AI Feature Store (Lama) ke Bigtable dapat meningkatkan performa dan fleksibilitas. Panduan ini memberikan ringkasan konsep terkait dan proses migrasi.

Vertex AI Feature Store (Lama) adalah lingkungan terkelola yang menggunakan Bigtable untuk lapisan penyajian online-nya. Menjalankan platform AI atau Feature Store langsung di Bigtable tanpa menggunakan Vertex AI Feature Store (Lama) dapat menghasilkan kecepatan yang lebih tinggi dan biaya yang lebih rendah.

Sebaiknya gunakan jalur migrasi yang layak minimum yang berfokus pada migrasi data dari tabel Bigtable pokok di Vertex AI Feature Store (Lama) ke instance Bigtable yang Anda buat di project Google Cloud .

Manfaat migrasi

Migrasi ke Bigtable menawarkan beberapa keuntungan strategis dan operasional:

  • Efisiensi biaya: Anda menghilangkan biaya premium pengelolaan node khusus Vertex AI Feature Store (Lama), sehingga sering kali mengurangi biaya infrastruktur.
  • Kontrol langsung: Anda mendapatkan akses penuh ke kemampuan Bigtable. Pemantauan Bigtable menampilkan lebih banyak metrik daripada Vertex AI Feature Store (Lama). Anda juga memiliki kontrol yang lebih besar atas tata letak dan penskalaan arsitektur kustom.
  • Performa tinggi: Bigtable mendukung workload berperforma tinggi dan fitur berperforma tinggi seperti agregasi pada penulisan dan penelusuran vektor.
  • Integrasi lintas produk: Anda mendapatkan akses ke integrasi Bigtable seperti tabel eksternal BigQuery, konektor untuk Apache Spark, Apache Flink, dan Kafka Connect, serta ETL terbalik dari BigQuery.

  • Pengambilan data perubahan: Anda dapat mengaktifkan aliran perubahan data untuk mencatat perubahan pada tabel feature store Bigtable saat perubahan terjadi.

Konsep utama

Bagian ini menjelaskan cara konsep inti Vertex AI Feature Store (Lama) diterapkan oleh Bigtable dan BigQuery.

Retensi data

Di Bigtable, Anda mengelola retensi data dengan pengumpulan sampah. Pembersihan sampah memori adalah proses otomatis dan berkelanjutan untuk menghapus data yang telah habis masa berlakunya dan tidak digunakan lagi dari tabel Bigtable. Kebijakan pengumpulan sampah adalah serangkaian aturan yang Anda buat yang menyatakan kapan data dalam fitur tertentu, yang ditentukan di Bigtable sebagai grup kolom, tidak lagi diperlukan. Kebijakan pengumpulan sampah ditetapkan berdasarkan stempel waktu yang terkait dengan data atau jumlah versi yang ingin Anda simpan.

Pengumpulan sampah adalah proses latar belakang asinkron bawaan yang terjadi selama pemadatan. Pengumpulan sampah terjadi sesuai jadwal tetap. Hingga data dihapus, data tersebut akan muncul di hasil baca, tetapi Anda dapat memfilter bacaan untuk mengecualikan data ini. Untuk mengetahui informasi selengkapnya, lihat Ringkasan pembersihan sampah memori.

Selain itu, penyimpanan bertingkat Bigtable dapat menjadi solusi hemat biaya untuk penyimpanan fitur online yang perlu mempertahankan data historis untuk pelatihan model atau kepatuhan terhadap peraturan. Penyimpanan bertingkat mengelola perpindahan data yang jarang diakses dari penayangan online di penyimpanan SSD ke tingkat penyimpanan berbiaya lebih rendah.

Pengembangan fitur

Di Bigtable, Anda dapat menerapkan pengembangan fitur online dengan Bigtable SQL, dan Anda dapat menerapkan pengembangan fitur offline menggunakan DataFrame BigQuery.

Saat menggunakan Vertex AI Feature Store (Lama), Anda akan bekerja dengan API developer dan model data yang dipetakan ke sumber data pokok yang disiapkan di BigQuery. Kemudian, Anda mendaftarkan sumber data dan kolom fitur tertentu ini di registry fitur. Dengan feature store Bigtable, Anda dapat langsung menggunakan data di instance BigQuery dan Bigtable yang mendasarinya, tanpa perlu memetakan ke model data Vertex AI Feature Store (Lama).

Pengembangan fitur online

Untuk pengembangan fitur online, Bigtable menawarkan beberapa alat:

  • Library klien Python: Gunakan library klien Python untuk Bigtable guna bekerja secara langsung dengan data di Bigtable.
  • GoogleSQL: Gunakan GoogleSQL untuk membaca dan mengubah data di Bigtable. Anda dapat menjalankan kueri SQL langsung di konsol Bigtable atau dari library klien Python.
  • Tampilan terwujud berkelanjutan: Untuk membuat fitur mendekati real-time yang memerlukan transformasi dan agregasi berulang, gunakan tampilan terwujud berkelanjutan Bigtable untuk menjalankan kueri SQL secara inkremental terhadap data saat data masuk ke Bigtable.

Pengembangan fitur offline

Untuk pengembangan fitur offline, BigQuery DataFrames menyediakan antarmuka Python dengan lebih dari 750 API pandas dan scikit-learn. API ini diterapkan melalui konversi SQL ke BigQuery dan BigQuery ML API. Fitur pembuatan DataFrame BigQuery memungkinkan fungsi Python bawaan dan yang ditentukan pengguna. Selain itu, Dataflow menyediakan sinkronisasi data otomatis ke Bigtable untuk menyajikan fitur yang dibuat dalam proses batch dan offline, yang dijelaskan di bagian berikutnya.

Sinkronisasi fitur online dan offline

Saat menggunakan Bigtable secara langsung untuk beban kerja ML, Anda dapat memastikan bahwa nilai fitur offline diimpor dari BigQuery dan nilai yang sama digunakan kembali untuk pelatihan dan inferensi, sehingga jalur kode tetap sinkron untuk membuat fitur antara pelatihan dan inferensi. Teknologi berikut memungkinkan sinkronisasi fitur:

  • Sinkronisasi batch: Reverse ETL dari BigQuery ke Bigtable memberikan kemampuan untuk mengekspor hasil kueri BigQuery ke Bigtable. Kueri ini dijalankan dalam batch dan dapat dijadwalkan langsung dari BigQuery.
  • Sinkronisasi streaming: Kueri berkelanjutan BigQuery adalah pernyataan SQL yang berjalan terus-menerus dan menghasilkan baris ke tabel Bigtable.
  • Sinkronisasi dari BigQuery DataFrames: Untuk merekam fitur offline yang dikembangkan di Python, Anda dapat menggunakan BigFrames StreamingDataFrame untuk membuat kueri berkelanjutan BigQuery yang merekam logika Python Anda untuk pembuatan fitur dan menyinkronkan hasil data dengan Bigtable.
  • Pengembangan fitur offline langsung pada data Bigtable: Anda dapat membuat fitur offline di BigQuery terhadap data yang disimpan di Bigtable menggunakan tabel eksternal BigQuery. Tabel eksternal mencerminkan tampilan tabel BigQuery dan menawarkan sebagian besar fungsi yang sama seperti gabungan, kueri terjadwal, dan fungsi SQL BigQuery lanjutan tanpa perlu memindahkan data kembali ke penyimpanan BigQuery. Untuk menghindari dampak pada traffic penayangan aplikasi, Anda dapat menggunakan komputasi tanpa server Data Boost saat membaca data Bigtable dengan tabel eksternal BigQuery. Penggunaan Data Boost sangat hemat biaya untuk kueri ad hoc. Untuk menggunakan Data Boost, tentukan profil aplikasi Data Boost saat Anda membuat definisi tabel eksternal. Untuk mengetahui informasi selengkapnya tentang Data Boost, lihat Ringkasan Data Boost Bigtable.

Setelah migrasi, Anda dapat terus menggunakan Vertex AI Model Monitoring untuk melacak kualitas model Anda.

Praktik penggunaan Bigtable dan BigQuery secara bersamaan adalah pola umum untuk membangun database analisis real-time.

Fase migrasi

Untuk memastikan kelangsungan layanan, migrasi biasanya dilakukan dalam fase yang berbeda berikut.

Fase 1: Siapkan infrastruktur

Sebelum memulai migrasi, siapkan lingkungan tujuan:

Fase 2: Tentukan pemetaan skema antara Vertex AI Feature Store (Lama) dan Bigtable

  1. Tinjau dan pahami praktik terbaik desain skema Bigtable. Pemetaan umum Vertex AI Feature Store (Lama) API ke Bigtable API adalah sebagai berikut:

    Resource Vertex AI Feature Store (Lama)

    Komponen Bigtable

    FeatureOnlineStore

    Instance Bigtable

    FeatureView

    Grup kolom

    featureValues (batch)

    Kolom (satu sel per kunci)

    featureValues (berkelanjutan)

    Kolom (beberapa sel per kunci [pembuatan versi])

  2. Setelah menentukan pemetaan skema, buat tabel Bigtable yang memiliki grup kolom untuk setiap fitur di penyimpanan fitur sumber.

Fase 3: Ekstraksi dan sinkronisasi data

Pada fase ini, Anda memigrasikan data menggunakan pendekatan bertingkat berdasarkan frekuensi pembaruan data.

Sinkronisasi fitur real-time

Untuk fitur yang Anda tulis dengan panggilan API write_feature_values atau yang setara, mulailah menulis data yang sama ke tabel Bigtable baru.

  1. Instal library klien Python untuk Bigtable.
  2. Konfigurasi aplikasi Anda untuk menulis data fitur secara bersamaan ke Vertex AI Feature Store (Lama) dan Bigtable. Untuk mengetahui informasi selengkapnya tentang penulisan data ke Bigtable, lihat Penulisan.

Migrasi fitur batch

Selanjutnya, migrasikan data yang disimpan sebelum Anda memulai penulisan ganda. Hal ini melibatkan pemindahan data dari Vertex AI Feature Store (Lama) ke BigQuery, lalu ke Bigtable.

  1. Ekspor data feature store ke BigQuery menggunakan kemampuan ekspor Vertex AI Feature Store (Lama) , yang memungkinkan Anda mengekspor semua nilai atau snapshot. Hal ini memungkinkan BigQuery berfungsi sebagai penyimpanan offline Vertex AI Feature Store (Lama).
  2. Migrasikan data historis dari BigQuery ke Bigtable menggunakan salah satu cara berikut:
    1. ETL Terbalik
    2. Konektor Bigtable Spark
    3. Template Dataflow BigQuery ke Bigtable

Fase 4: Transisi aplikasi dan SDK

Langkah terakhir adalah mengalihkan lapisan aplikasi.

  1. Setelah migrasi selesai dan diuji, berhenti menulis ke Vertex AI Feature Store (Lama).
  2. Ubah aplikasi Anda agar hanya menggunakan library klien Python untuk Bigtable.

    Contoh berikut menunjukkan penggunaan Python untuk menarik satu fitur dari Bigtable.

    from google.cloud import bigtable
    from google.cloud.bigtable import row_filters
    # Replace 'project_id' and 'instance_id' with your actual IDs.
    client = bigtable.Client(project=project_id)
    instance = client.instance(instance_id)
    
    #return only the latest feature
    row_filter = bigtable.row_filters.CellsColumnLimitFilter(1)
    
    # Replace 'user1' and 'feature0` with your actual row key and column qualifier.
    
    print("Getting a single feature by row key.")
    key = "user1".encode()
    
    row = table.read_row(key, row_filter)
    cell = row.cells[column_family_id.decode("utf-8")][feature0][0]
    print(cell.value.decode("utf-8"))
    

    Untuk contoh lain tentang cara membaca dan menulis data menggunakan API admin dan data Bigtable, lihat Python hello world.

    Library klien Python untuk Bigtable juga memungkinkan Anda menggunakan GoogleSQL untuk menampilkan fitur yang memenuhi kriteria filter atau untuk melakukan transformasi fitur. Contoh berikut menunjukkan cara memanggil kueri SQL secara asinkron dari library klien Bigtable Python. Untuk informasi tambahan tentang GoogleSQL untuk Bigtable, lihat Contoh SQL tambahan.

    import asyncio
    from google.cloud.bigtable.data_async import BigtableDataClient
    from google.cloud.bigtable_v2.types import ExecuteQueryRequest
    
    async def run_bigtable_sql_query(project_id, instance_id, table_id):
        """
        Runs a GoogleSQL query on a Bigtable table using the async client.
        """
        client = BigtableDataClient(project_id=project_id)
        instance = client.instance(instance_id)
        table = instance.table(table_id)
    
        # Example query: Select a specific row and all columns from a column family
        # Replace 'my_table' and 'my_cf' with your actual table and column family IDs.
        # The table name in the SQL must be in the format `dataset.table`,
        # where dataset is the instance ID and table is the table ID (in backticks).
        sql_query = f"SELECT _key, my_cf FROM `{instance_id}`.`{table_id}` WHERE _key = 'user_123'"
    
        print(f"Executing query: {sql_query}")
    
        # The client library automatically handles the SQL execution
        try:
            # The query method returns an AsyncPartialRowsIterator
            results_iterator = await table.query(query=sql_query)
    
            async for row in results_iterator:
                print(f"Row key: {row.row_key.decode('utf-8')}")
                # Iterate through the cells in the row
                for col_family, cells in row.cells.items():
                    for cell in cells:
                        print(f"  Column Family: {col_family}, Qualifier: {cell.qualifier.decode('utf-8')}, Value: {cell.value.decode('utf-8')}, Timestamp: {cell.timestamp_micros}")
    
        except Exception as e:
            print(f"An error occurred: {e}")
        finally:
            await client.close()
    
    if __name__ == "__main__":
        # TODO(developer): Replace with your project, instance, and table IDs
        your_project_id = "your-gcp-project-id"
        your_instance_id = "your-bigtable-instance-id"
        your_table_id = "your-bigtable-table-id"
    
        # Run the asynchronous function
        asyncio.run(run_bigtable_sql_query(your_project_id, your_instance_id, your_table_id))
    
  3. Mulai menggunakan metrik Bigtable untuk memantau latensi dan throughput. Untuk mengetahui informasi selengkapnya, lihat Monitoring.

Praktik terbaik

Setelah beralih dari Vertex AI Feature Store (Lama) ke penerapan penyimpanan fitur Bigtable, Anda perlu mereplikasi logika praproses dan pengoptimalan internal yang sebelumnya ditangani oleh layanan untuk mempertahankan stabilitas dan performa.

Throttling adaptif sisi klien

Backend Vertex AI Feature Store (Lama) menggunakan pembatas adaptif sisi klien untuk melindungi instance Bigtable yang mendasarinya agar tidak kelebihan beban selama lonjakan traffic atau saat backend penyimpanan mengalami latensi tinggi atau error. Sebaiknya terapkan pembatas yang serupa dalam kode aplikasi Anda untuk mendaftarkan respons backend dan secara proaktif membatasi permintaan jika diperlukan.

Pengoptimalan ukuran batch dan partisi permintaan

Filter baris Bigtable memiliki batas tetap sebesar 20 KB. Meminta terlalu banyak fitur atau ID entity dalam satu pembacaan yang difilter dapat menyebabkan permintaan gagal. Untuk mencerminkan perilaku Vertex AI Feature Store (Lama), lakukan hal berikut:

  • ID fitur chunk: Batasi jumlah ID fitur per pembacaan Bigtable hingga sekitar 100.
  • Seimbangkan batch entity: Untuk mencegah saturasi resource klien atau server saat melakukan pembacaan multi-entity, lakukan tindakan pencegahan berikut:
    • Partisi entitas ke dalam batch serentak kecil, seperti 10 entitas per batch.
    • Batasi jumlah maksimum permintaan batch serentak, seperti 10-20.

Pemilihan filter cerdas

Menghitung dan menerapkan filter kolom di sisi server akan menambah overhead. Jika aplikasi Anda biasanya meminta hampir semua fitur dalam family kolom, seperti >99,9%, akan lebih efisien jika Anda melewati filter kolom dan membaca seluruh baris, lalu memfilter hasilnya di sisi klien.

Eksekusi serentak dan asinkron

Untuk meminimalkan waktu hingga hasil pertama dalam skenario streaming, gunakan pola asinkron atau paket thread untuk mengambil batch entitas secara paralel. Hal ini memastikan bahwa aplikasi dapat mulai memproses hasil segera setelah batch pertama dikembalikan, bukan menunggu pembacaan serial yang besar selesai.

Langkah berikutnya