FastAPI: Framework API untuk Melayani Produk Data Pembelajaran Mesin
Saat ini sebagian besar model pembelajaran mesin disajikan dalam produksi sebagai layanan. Metode ini memisahkan aplikasi klien dari model pembelajaran mesin melalui Application Programming Interface (API).
Pada artikel ini, saya akan memandu Anda melalui konsep API, kemampuan pengubah game FastAPI, dan melayani produk data pembelajaran mesin kami dengan FastAPI.
Apa itu API?
Antarmuka pemrograman aplikasi ( API ) adalah antarmuka perangkat lunak untuk dua atau lebih aplikasi untuk berkomunikasi satu sama lain.
Cara termudah untuk memahami apa itu API adalah dengan membayangkan diri Anda di restoran. Anda memasuki restoran, menemukan meja Anda, dan menerima menu. Di menu, ada nama, deskripsi, dan harga makanan. Anda memilih kombinasi Anda dan Anda ingin memberikan perintah. Tapi bagaimana permintaan Anda akan dikirimkan ke koki? Koki tidak bisa datang ke ruang makan dan Anda tidak bisa pergi ke dapur. Anda membutuhkan seseorang untuk mendapatkan permintaan Anda dan mengirimkannya ke dapur dan nanti saat makanan sudah siap bawa ke meja Anda. Ya, Anda membutuhkan pramusaji atau pramusaji!
Analogi yang sama berlaku untuk aplikasi. Untuk membuat aplikasi berbicara satu sama lain atau mendapatkan permintaan mereka dan memposting keluarannya, API berfungsi sebagai orang tengah.
Contoh API
Google Maps: Google Maps melayani berbagai API dalam aplikasi. Saat Anda menelusuri kota, area, atau lingkungan tempat tinggal, cuaca, kualitas udara, dan bahkan selama masa covid menghasilkan infeksi terbaru. Dengan cara yang sama, saat Anda mencari tempat makan, Google Maps menunjukkan restoran, kafe, menunya, jam buka, dan bahkan jika tersedia opsi reservasi online melalui aplikasi pihak ketiga.
Aplikasi perjalanan: Booking.com, Trivago, Expedia, dan lainnya menawarkan pengalaman perjalanan ujung ke ujung saat ini. Saat Anda memeriksa aplikasi mereka, Anda dapat memesan hotel, membeli tiket pesawat, menyewa mobil, atau membuat reservasi di acara mencicipi anggur. Tak satu pun dari barang-barang ini dimiliki dan dikelola secara langsung oleh perusahaan-perusahaan ini. Mereka mendapatkan permintaan Anda dan membuat koneksi ke aplikasi lain yang menyajikan informasi ini.
FastAPI
FastAPI adalah kerangka kerja Web untuk mengembangkan RESTful API dengan Python. FastAPI mengembangkan basis penggunanya setiap hari. Tidak hanya insinyur perangkat lunak tetapi juga ilmuwan data, insinyur pembelajaran mesin, dan insinyur data sudah mulai menggunakan FastAPI. Gerakan revolusioner yang mendorong semua orang data untuk bermigrasi dari Flask dan Django ke FastAPI dalam waktu singkat.
Kemampuan GAME Changer dari FastAPI
Permintaan sinkron vs asinkron
Sebelum membahas definisi teknis, mari kembali ke contoh restoran kita.
Anda memberikan pesanan Anda kepada pelayan dan dia memberi tahu Anda bahwa hanya ada satu juru masak di dapur dan dia sudah memiliki 5 permintaan dalam antrian ! Anda mulai menunggu pesanan Anda diantarkan. Setelah 30 menit dengan permintaan maaf, makanan Anda tiba. Anda belajar bahwa satu orang seberapa cepat dia tidak dapat menangani 10 meja pada waktu yang sama. Ini adalah permintaan sinkron.
Lain kali Anda ingin mencoba restoran lain. Sebelum memberikan pesanan Anda, Anda bertanya kepada pelayan berapa banyak juru masak yang mereka miliki. Pelayan menertawakan Anda dan memberi tahu Anda bahwa “Kami memiliki 5 juru masak di dapur dan mereka sedang menunggu untuk melayani Anda, Tuan. Kami bukan amatir!” Anda memberikan pesanan Anda dan 10 menit kemudian Anda mendapatkan permintaan Anda. Anda melihat sekeliling dan melihat bahwa meja lain juga disajikan. Ini adalah permintaan asinkron.
Panggilan API sinkron adalah pola desain tempat situs panggilan diblokir sambil menunggu kode yang dipanggil selesai. Dengan panggilan API asinkron, situs panggilan tidak diblokir saat menunggu kode yang dipanggil selesai, sebaliknya, utas panggilan diberi tahu saat balasan tiba.
Dalam kondisi beban yang lebih berat, akan lebih efisien untuk mengirimkan beberapa panggilan asinkron dan memeriksa status secara berkala daripada menunggu setiap panggilan selesai sebelum mengirimkan panggilan berikutnya.
from fastapi import FastAPI
app = FastAPI()
async def get_restaurant_working_hours():
# some operations
pass
@app.get("/")
async def get_resturant_reservation_details():
results = await restaurant_working_hours() # waits for the defined function
# some operations
return results
FastAPI mendukung validasi parameter string dan numerik.
Contoh validasi string
Pada contoh di bawah ini, saya telah menambahkan batasan string dengan panjang minimal 5 karakter dan maksimal 100 karakter. Ketika saya memanggil titik akhir ini melalui Postman dan mengirimkan teks dengan ukuran 3, ia mengeluarkan pengecualian seperti di bawah ini.
from typing import Optional
from fastapi import FastAPI, Query
import uvicorn
app = FastAPI()
@app.get("/orders/")
async def read_orders(query: Optional[str] = Query(None, min_length=5, max_length=100)): #defining the constraints
results = {"order": [{"order_id": "Order_1"}, {"order_id": "Order_2"}]}
return results
if query:
results.update({"query": query})
if __name__ == "__main__":
uvicorn.run("parameter-validations:app")
Screenshot created by the author
Pada contoh di bawah ini, saya telah menambahkan batasan numerik dengan nilai minimal 1 dan maksimal 100. Saat saya memanggil titik akhir ini melalui Postman dan meneruskan 0, pengecualian akan muncul seperti di bawah ini.
from typing import Optional
from fastapi import FastAPI, Query
import uvicorn
app = FastAPI()
@app.get("/orders/")
async def read_items(order_count: int = Query(gt=1, lt=100)): # defining the constraints
results = {"order_count": order_count}
return results
if __name__ == "__main__":
uvicorn.run("parameter-validations:app")
Screenshot created by the author
Pydantic adalah pustaka Python yang digunakan untuk melakukan serialisasi dan validasi data.
FastAPI memiliki integrasi dengan Pydantic . Ini memastikan saat runtime untuk mengurai, mengevaluasi, dan memberi tahu pengguna melalui IDE tentang kesalahan terkait tipe.
Di bawah ini Anda dapat menemukan contoh pesan kesalahan;
fastapi.exceptions.FastAPIError: Invalid args for response field! Hint: check that False is a valid Pydantic field type. If you are using a return type annotation that is not a valid Pydantic field (e.g. Union[Response, dict, None]) you can disable generating the response model from the type annotation with the path operation decorator parameter response_model=None. Read more: https://fastapi.tiangolo.com/tutorial/response-model/
Membangun produk data membutuhkan banyak tim yang berbeda untuk bekerja sama; misalnya ilmu data, pembelajaran mesin, rekayasa perangkat lunak, dll. Dalam kolaborasi lintas fungsi ini, penyelarasan penanganan kesalahan dan pengiriman pesan menjadi sangat penting. FastAPI mendukung penanganan kesalahan khusus dengan pesan dan kode status.
from fastapi import FastAPI, HTTPException
import uvicorn
app = FastAPI()
cities = {1: "Berlin", 2: "Hamburg", 3: "München"}
@app.get("/cities/{city_id}")
async def read_city_id(city_id: int):
if city_id not in cities:
raise HTTPException(status_code=404, detail="City id is not found") # status code and error message is defined
results = {"city": cities[city_id]}
return results
if __name__ == "__main__":
uvicorn.run("error-message:app")
Screenshot created by the author
FastAPI mendukung pengembang dengan titik akhir yang interaktif dan mudah diuji secara otomatis di browser. Dengan mengikuti tautan di bawah ini, Anda akan diarahkan ke rute yang Anda buat.
http://localhost:8000/docs
Screenshot created by the author
Dokumentasi memungkinkan pengguna untuk menguji titik akhir yang dibuat. Anda hanya perlu mengklik tombol "Cobalah" .
Untuk menguji validasi numerik, saya meneruskan 0 ke jumlah pesanan dan API mengembalikan pesan kesalahan dan status 422 secara otomatis.
Model pembelajaran mesin melayani dengan FastAPI
Karena kami telah mempelajari dasar-dasar FastAPI, kami siap menggunakannya untuk melayani model pembelajaran mesin kami.
Dalam contoh ini, saya menggunakan kumpulan data mobil bekas untuk memprediksi nilai mobil. Kumpulan data berisi karakteristik tentang mobil dari merek hingga berapa kilometer yang ditempuh dengan mobil tersebut. Untuk menyederhanakan contoh, saya tidak akan membagikan pembersihan data, persiapan data, dan langkah-langkah pembuatan model tetapi menyajikan semuanya dalam file acar.
Kode Python memuat file acar, membuat titik akhir prediksi, dan mengembalikan prediksi harga mobil.
from fastapi import FastAPI
import joblib
import numpy as np
import pandas as pd
import uvicorn
# passing title, version and description parameters to the class object
app = FastAPI(
title="Car Price Prediction",
version="1.0",
description="Model type: Linear Regression",
)
# loading previously saved pickle file
model = joblib.load("./LinearRegressionModel.pkl")
# creating predict end point
@app.get("/api/predict")
async def predict(
name: str, company: str, year: int, kms_driven: float, fuel_type: str
):
result = model.predict(
pd.DataFrame(
columns=["name", "company", "year", "kms_driven", "fuel_type"],
data=np.array([name, company, year, kms_driven, fuel_type]).reshape(1, 5),
)
)[0]
return result
if __name__ == "__main__":
uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
Screenshot created by the author
Screenshot created by the author
Kesimpulan
FastAPI telah menjadi kerangka kerja masuk untuk tujuan penyajian API di domain data. Setiap hari saya membaca artikel lain bahwa tim data bermigrasi ke FastAPI dan betapa mereka mendapat manfaat dari perubahan ini. Saya menantikan untuk melihat lebih banyak pembaruan dalam beberapa bulan dan tahun mendatang.
Kudos to Sebastián Ramírez , timnya, dan semua kontributor!
Terima kasih banyak telah membaca
Untuk seri Produk Data saya , Anda dapat memeriksa tautan di bawah ini;
Manajer Produk Data: Pekerjaan Paling Penting di Abad ke-21
Pemikiran Produk untuk Tim Data
Apakah Anda Ingin Melihat Menu “Produk Data” Kami?
Anda dapat menemukan saya di Linkedin dan Mentoring Club

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































