Hosting FastAPI dengan Saturn Cloud Deployments – Menuju AI — Publikasi AI dan Teknologi Terkemuka di Dunia

Penulis (s): Sayar Banerjee

Awalnya diterbitkan di Towards AI the World’s Leading AI and Technology News and Media Company. Jika Anda sedang membangun produk atau layanan terkait AI, kami mengundang Anda untuk mempertimbangkan untuk menjadi sponsor AI. Di Towards AI, kami membantu menskalakan AI dan startup teknologi. Biarkan kami membantu Anda melepaskan teknologi Anda kepada massa.

Hosting FastAPI dengan Penerapan Cloud Saturn

Foto oleh Boitumelo Phetla di Unsplash

Hai semua, artikel ini akan membahas proses penerapan aplikasi FastAPI di Saturn Cloud. FastAPI adalah kerangka kerja web yang kuat untuk membangun API dengan bahasa Python. Saturn Cloud adalah platform yang didedikasikan untuk menskalakan Machine Learning dan pipa Big Data dan banyak lagi.

Model akan memprediksi harga rumah rata-rata di California. Mari kita melompat ke dalamnya.

Sumber daya

Repositori

FastAPI

Scikit-belajar

Lib Joblib

Eksplorasi Data

Kumpulan data yang akan saya gunakan untuk melatih model pembelajaran mesin kami disebut “Harga Perumahan California”. Hal ini dapat ditemukan di sini.

Isi data kami adalah sebagai berikut:

Data berkaitan dengan rumah-rumah yang ditemukan di distrik California tertentu dan beberapa ringkasan statistik tentang mereka berdasarkan data sensus 1990. Berhati-hatilah, datanya tidak bersih, jadi ada beberapa langkah pra-pemrosesan yang diperlukan! Kolomnya adalah sebagai berikut, dan namanya cukup jelas:

bujur garis lintang perumahan_median_usia total_kamar total_kamar tidur populasi rumah tangga median_pendapatan median_rumah_ nilai laut_dekat

Saat melakukan eksplorasi dasar dataset, saya menemukan yang berikut:

Gambar Oleh Penulis

Plot korelasi antara semua fitur numerik menunjukkan kepada kita hal berikut:

Gambar Oleh Penulis

Menurut grafik, sebagian besar fitur numerik memiliki korelasi yang sangat kecil dengan nilai_rumah_median kecuali median_pendapatan, yang tampaknya memiliki korelasi positif yang kuat sekitar 0,68.

Pembersihan Data/Rekayasa Fitur

Karena fitur total_bedrooms memiliki nilai yang hilang, saya harus memperhitungkannya. Untuk kesederhanaan, saya memilih median sebagai metrik untuk menghubungkan fitur tersebut.

Selain itu, dua fitur baru telah direkayasa, yaitu, “kamar_per_rumah tangga” dan “penduduk_per_rumah tangga”.

Dibuat dengan carbon.now.sh

Melatih Model

Repositori kami terlihat seperti ini:

Dibuat dengan carbon.now.sh

File requirements.txt berisi dependensi kami. Sangat penting untuk menambahkan semua dependensi ke file ini karena akan digunakan selama penerapan kami.

Dibuat dengan carbon.now.sh

File src/main.py berisi skrip pelatihan kami. Mari kita lihat beberapa fungsi penting dalam skrip.

Pipa model pelatihan kami relatif standar. Hanya ada satu kolom kategoris (ocean_proximity). Untuk kolom numerik lainnya, saya menerapkan scaler standar. Penaksir ColumnTransformer membantu memfasilitasi transformasi fitur pada data heterogen.

Untuk modelnya, saya memilih algoritma Random Forest. Saya membuat pipeline menggunakan kelas Pipeline scikit-learn.

Dibuat dengan carbon.now.sh

Saya menggunakan joblib untuk menyimpan model kami. Karena file modelnya cukup besar (>100Mb), saya memutuskan untuk menyimpannya di AWS S3. Skor R² model sekitar 0,81, dan RMSE sekitar 49k.

Menyiapkan Server FastAPI dan Frontend

Seperti yang mungkin sudah Anda duga, app/main.py berisi kode kami untuk server. Karena model disimpan di AWS, saya menggunakan boto3 untuk mengunduh salinan lokal ke server.

Jika bucket dan file Anda bersifat pribadi, Anda mungkin perlu mengatur autentikasi untuk mengaksesnya di Saturn Cloud. Anda dapat melakukannya dengan mengikuti panduan ini.

Saya menulis fungsi sederhana untuk memuat model kami dari AWS:

Dibuat dengan carbon.now.sh

Variabel BUCKET_NAME dan FILE_NAME sudah cukup jelas. LOCAL_PATH adalah jalur ke mana model akan disalin secara lokal.

Saya juga mendefinisikan variabel global untuk aplikasi, model, dan template.

Dibuat dengan carbon.now.sh

Beranda

Karena saya membuat aplikasi, sangat penting untuk memiliki beranda yang berfungsi sebagai antarmuka untuk server model.

Saya membuat beranda untuk aplikasi sehingga pengguna dapat memasukkan nilai untuk setiap fitur. Untuk merender halaman, saya menggunakan Jinja2Templates, yang disediakan langsung oleh template FastAPI.TemplateResponse merender halaman arahan kami yang berjudul “index.html.”

Dibuat dengan carbon.now.sh

index.html berisi formulir yang akan berfungsi sebagai antarmuka untuk aplikasi kita. Tubuh halaman terlihat seperti ini:

Dibuat dengan carbon.now.sh

Jika Anda melihat lebih dekat pada tag formulir, Anda akan melihat bahwa atribut tindakan disetel ke “/submitform” dan metode permintaannya adalah permintaan POST.

Dibuat dengan carbon.now.sh

Server FastAPI kami perlu memiliki metode yang menangani data formulir. Metode ini perlu didekorasi oleh app.post(“/submitform”) untuk menangani permintaan dengan tepat.

Dibuat dengan carbon.now.sh

Anda akan melihat bahwa setiap variabel ditetapkan sebagai parameter formulir menggunakan Formulir. Kelas ini memberi tahu FastAPI bahwa setiap input variabel diterima dari formulir.

Anda juga akan melihat bahwa baris 26 memiliki metode yang disebut prediksi. Metode ini sebenarnya di mana model pipa diberi masukan dari formulir menggunakan format yang sesuai. Karena pipeline hanya dapat menerima input dari bingkai data, pertama-tama saya mengubah data menjadi bingkai data. Saya kemudian membuat fitur sebagai bagian dari proses rekayasa fitur. Akhirnya, saya mengembalikan prediksi model.

Dibuat dengan carbon.now.sh

Setelah saya mendapatkan prediksi harga, saya menggunakan templates.TemplateResponse lagi untuk mengembalikan halaman bernama result.html. Seiring dengan “permintaan”, saya juga melewati “harga” melalui metode TemplateResponse. Akhirnya, saya merender harga di badan result.html.

Dibuat dengan carbon.now.sh

Menyebarkan ke Saturnus Cloud

Sebelum menyiapkan penerapan, saya mendorong semua kode ke Github. Untuk menyebarkannya, Anda harus menghubungkan repositori Anda ke Saturn Cloud. Untuk melakukannya, Anda dapat mengikuti panduan ini.

Setelah repo Anda terhubung, buka sumber daya dan pilih “Penempatan Baru”.

Gambar Oleh Penulis

Setelah ini, Anda akan disambut dengan formulir:

Gambar Oleh Penulis

Ada beberapa hal yang perlu diperhatikan saat mengisi formulir. Misalnya, “Perintah” adalah yang akan dijalankan penerapan untuk memulai aplikasi Anda.

Dibuat dengan carbon.now.sh

Perhatikan bahwa Saturn Cloud mengharuskan aplikasi Anda untuk mendengarkan menggunakan port 8000.

Perhatikan juga tajuk Paket Ekstra. Ini adalah skrip yang akan digunakan untuk menginstal paket tambahan sebelum perintah dijalankan. Karena gambar default Saturn Cloud tidak memiliki pustaka tertentu seperti FastAPI dan Uvicorn, berikan “-r requirements.txt” ke kotak teks.

Ini memastikan bahwa skrip “`pip install -r requirements.txt` “dijalankan sebelum startup, yang berisi dependensi untuk paket tambahan.

Perhatikan bahwa Anda juga dapat menulis nama individu dari setiap paket di bagian ini untuk menginstalnya.

Setelah Anda menekan tombol Buat, penerapan Anda akan dibuat. Klik di atasnya dan tambahkan repo Github Anda ke penerapan. Pastikan Anda menambahkan jalur ke sumber daya Github ke direktori kerja Anda. Setelah selesai, klik panah hijau untuk memulai penerapan.

Gambar Oleh Penulis

Setelah penerapan Anda siap, klik URL publik. Anda akan melihat halaman seperti ini:

Gambar Oleh Penulis

Setelah Anda mengisi formulir, Anda akan melihat halaman dengan prediksi harga:

Gambar Oleh Penulis

Perhatikan bahwa saya menggunakan contoh terakhir dari set pengujian saya sebagai input. Harga rumah rata-rata sebenarnya adalah $ 133000, jadi modelnya melakukan pekerjaan yang cukup baik! 😀

Tautan ke direktori Github

Kesimpulan

Selamat! Anda telah berhasil mempelajari cara menerapkan model FastAPI di Saturn Cloud! Jika Anda ingin tahu tentang menggunakan lingkungan mereka, mereka menawarkan 30 jam gratis sebulan untuk ilmuwan data dan tim. Saya harap Anda menikmati membaca artikel ini. Sampai Lain waktu! ✋

Ilmu Data awalnya diterbitkan di Towards AI on Medium, di mana orang-orang melanjutkan percakapan dengan menyoroti dan menanggapi cerita ini.

Diterbitkan melalui Menuju AI