Sederhanakan pembuatan pipeline data untuk media dengan Klio Spotify

Setiap hari, layanan streaming musik Spotify dapat memproses file audio dengan ratusan cara berbeda—mengidentifikasi ritme dan tempo lagu, membuat stempel waktu ketukan, dan mengukur kenyaringan—serta pemrosesan yang lebih canggih, seperti mendeteksi bahasa dan memisahkan vokal dari instrumen. Ini mungkin dilakukan untuk mengembangkan fitur baru, membantu menginformasikan playlist dan rekomendasi, atau murni untuk penelitian.

Melakukan pemrosesan semacam ini pada satu file audio sangat berarti. Namun, library musik Spotify memiliki lebih dari 60 juta lagu, dan bertambah 40.000 lagu setiap hari, belum termasuk katalog podcast yang berkembang pesat. Kemudian, perhitungkan juga bahwa ratusan tim produk memproses semua lagu ini secara bersamaan, di seluruh dunia, dan untuk kasus penggunaan yang berbeda. Skala dan kompleksitas ini—ditambah, kesulitan menangani file biner besar sejak awal—bisa menghambat kolaborasi dan efisiensi, sehingga pengembangan produk terhenti. Kecuali jika Anda memiliki Klio.

Apa yang dimaksud dengan Klio?

Untuk memproduksi pemrosesan audio, Spotify membuat Klio—framework berbasis Apache Beam untuk Python yang membantu peneliti dan programmer menjalankan pipeline data berskala besar untuk memproses file audio dan media lainnya (seperti video dan gambar). Spotify awalnya membuat Klio setelah menyadari bahwa peneliti ML dan audio di seluruh perusahaan melakukan tugas pemrosesan audio yang serupa, tetapi menemui kesulitan untuk men-deploy dan memeliharanya. Spotify melihat peluang untuk membuat proses yang fleksibel dan terkelola yang akan mendukung berbagai kasus penggunaan pemrosesan audio dari waktu ke waktu—secara efisien dan dalam skala besar—serta mudah digunakan.

Di tingkat tinggi, Klio memungkinkan pengguna menyediakan file media sebagai input, melakukan pemrosesan yang diperlukan, dan menghasilkan data serta fitur cerdas. Ada banyak kemungkinan kasus penggunaan untuk audio, mulai dari menstandardkan tugas pemrosesan audio biasa dengan ffmpeg atau librosa hingga menjalankan model machine learning khusus.

Klio menyederhanakan dan menstandardkan pembuatan pipeline untuk tugas-tugas ini, meningkatkan efisiensi, dan memfokuskan pengguna pada tujuan bisnis daripada memelihara infrastruktur pemrosesan. Sekarang Klio telah dirilis sebagai sumber terbuka, siapa pun bisa menggunakan framework ini untuk membangun alur kerja pemrosesan media yang dapat diskalakan dan efisien.

Bagaimana cara kerja Klio?

Klio job overview.jpg
Ringkasan tugas Klio

Saat ini Klio mungkinkan beberapa langkah penting untuk membuat pipeline yang diinginkan. Pertama, Klio mengasumsikan bahwa pipeline akan menerima file biner besar sebagai input. Ini bisa berupa audio, gambar, atau video. File ini disimpan di Cloud Storage. Sebagai bagian darinya, tugas mengirimkan pesan unik ke Pub/Sub, yang mengumumkan bahwa file telah di-upload. Klio kemudian membaca pesan ini dan men-download file untuk memulai pemrosesan. Pada langkah ini, Klio bisa mulai menjalankan logika yang diperlukan secara cerdas untuk memproses hasil yang diinginkan untuk kasus penggunaan tertentu, seperti ekstraksi bahasa. Setelah pemrosesan selesai, artefak outputnya di-upload ke bucket Cloud Storage lain untuk disimpan. Orkestrasi pipeline secara keseluruhan dilakukan oleh Apache Beam, yang memungkinkan antarmuka Python tradisional untuk pengguna ML/audio dan eksekusi pipeline tradisional.

Salah satu keunggulan utama Klio adalah dukungannya untuk Directed Acyclic Graphs (DAG), yang memungkinkan pengguna mengonfigurasi tugas dependen dan urutan eksekusinya sehingga tugas induk bisa memicu tugas turunannya.

directed acyclic graphs.jpg

Dalam contoh ini, ada tiga tim yang semuanya mengandalkan tugas induk yang sama secara keseluruhan, yang disebut Downsample. Downsampling ini menyesuaikan jumlah sampel dalam file audio untuk mengompresi file ke tingkat tertentu yang mungkin diperlukan untuk tugas selanjutnya. Hasilnya, sekarang tugas Tim A, B, dan C bisa mulai meluncurkan pemrosesan yang mereka butuhkan. Tugas ini mungkin mendeteksi “vokal” atau jumlah kata yang diucapkan, “instrumental” atau ketiadaan vokal, dan banyak lagi.

Fitur utama Klio yang lain adalah kemampuannya mengoptimalkan urutan eksekusi. Menjalankan tugas Klio dalam grafik untuk file tertentu tidaklah selalu efisien atau diperlukan. Mungkin Anda ingin melakukan iterasi tugas sendiri tanpa memicu tugas yang setara atau tugas hilir. Atau Anda memiliki subset katalog media yang memerlukan beberapa pemrosesan pengisian ulang. Terkadang ini berarti menjalankan tugas Klio induk untuk mengisi dependensi yang hilang. Karena itu, Klio mendukung pemrosesan bottom-up saat dibutuhkan, seperti ini:

optimize the order of execution.gif

Pertama-tama tugas Klio akan memeriksa untuk melihat apakah pekerjaan untuk file tertentu telah diproses. Jika telah diproses, pekerjaan untuk tugas tersebut akan dilewati. Namun, jika data input tugas tidak tersedia (yaitu, jika tugas Energy tidak memiliki output dari tugas Beat Tracking untuk audio tertentu), Klio secara rekursif akan memicu tugas dalam barisan langsung eksekusinya tanpa memicu pekerjaan untuk tugas yang setara.

Bagaimana pengembangan Klio selanjutnya?

Rilis awal Klio ini merepresentasikan dua tahun pembangunan, pengujian, dan aplikasi praktik oleh berbagai tim di Spotify. Sejak awal, Klio dibuat dengan berorientasi pada sumber terbuka.

Dengan keseluruhan arsitektur ini, pengguna bebas menambahkan kustomisasi khusus untuk memenuhi kebutuhan mereka. Klio bersifat cloud-agnostik, yang berarti bahwa Klio bisa mendukung berbagai runner, baik secara lokal maupun cloud. Dalam kasus Spotify, ini berarti Google Cloud, menggunakan Apache Beam untuk memanggil Dataflow Runner. Namun hal ini juga bisa diperluas ke runner lain. Jika Anda tertarik berkontribusi, mereka akan menyambut setiap kolaborasi dengan komunitas sumber terbuka.

Meskipun pada awalnya dibuat untuk audio, Klio mampu melayani semua tipe media. Di Spotify, Klio telah meraih kesuksesan dalam berbagai kasus penggunaan internal. Secara khusus, Klio memisahkan vokal dan instrumen untuk mengaktifkan fungsionalitas Sing Along di Jepang serta atribut audio umum sidik jari, seperti “danceability” dan “tempo,” di Audio Features API mereka. Berdasarkan kesuksesan awal dari kasus penggunaan ini, akan sangat menarik bila melihat masalah pemrosesan media lainnya yang bisa dipecahkan oleh Klio, baik dengan mengaktifkan moderasi konten skala besar maupun melakukan deteksi objek dalam streaming video berukuran besar.

Cara memulai

Untuk mempelajari lebih lanjut, baca kisah Klio selengkapnya di blog Spotify Engineering. Atau bergabunglah dan memulai Klio sekarang.