Anglais
pip install SwanAPI -i https://pypi.org/simple
1️⃣ Écrivez un fichier predict.py
. Nous utilisons ici l'exemple de conversion d'une image en noir et blanc :
Si vous avez déjà écrit Gradio, vous devez être familier avec cette méthode d'écriture, qui est très similaire à la méthode de définition
gr.Interface
.
from SwanAPI import SwanInference
import cv2
# 这是一个简单的图像转黑白的任务
def predict ( im ):
result_image = cv2 . cvtColor ( im , cv2 . COLOR_BGR2GRAY )
return "success" , result_image
if __name__ == "__main__" :
api = SwanInference ()
api . inference ( predict ,
inputs = [ 'image' ],
outputs = [ 'text' , 'image' ],
description = "a simple test" )
api . launch ()
2⃣️ Exécutez python predict.py
pour exécuter un service d'inférence API sur localhost://127.0.0.1:8000/
$ python predict.py
* Serving Flask app " SwanAPI Server" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:8000/ (Press CTRL+C to quit)
3⃣️ Appeler l'API
from SwanAPI import SwanRequests , Files
response = SwanRequests (
url = "http://127.0.0.1:8000/predictions/" ,
inputs = { 'im' : Files ( "/path/to/image" )}) #填写图像文件的本地路径
print ( response )
Si vous utilisez
curl
pour envoyer une requête :
curl --location ' http://127.0.0.1:8000/predictions/ '
--form ' im=@"path/to/image" '
Lorsque les sorties sont définies sur « image », le flux d'octets codé en base64 est renvoyé et converti en np.ndarray en python :
from SwanAPI import SwanRequests , Files
import base64
import numpy as np
import cv2
response = SwanRequests (
url = "http://127.0.0.1:8000/predictions/" ,
inputs = { 'im' : Files ( "../Feedback/assets/FeedBack.png" )}) #填写图像文件的本地路径
image_base64 = response [ str ( 1 )][ 'content' ]
nparr = np . frombuffer ( base64 . b64decode ( image_base64 ), np . uint8 )
img_restore = cv2 . imdecode ( nparr , cv2 . IMREAD_COLOR )
cv2 . imwrite ( "output.jpg" , img_restore )
Une fois le développement predict.py
terminé :
1⃣️ Créez un fichier swan.yaml
, qui guidera la construction de votre image
build :
gpu : false
system_packages :
- " libgl1-mesa-glx "
- " libglib2.0-0 "
python_version : " 3.10 "
python_packages :
- " numpy "
- " opencv-python "
predict :
port : 8000
construire:
gpu
: s'il faut activer le mode GPU. true sélectionnera automatiquement la meilleure prise en charge nvidia en fonction de votre configuration matérielle, de votre version python et de votre framework d'apprentissage en profondeur.
system_packages
: bibliothèques de base du système Linux, elles apt-get install
.
python_version
: La version de base de Python sur laquelle l'image s'exécute prend en charge 3.8, 3.9 et 3.10.
python_packages
: bibliothèques Python dont dépend votre modèle
- "torch==2.0.0 --index-url https://download.pytorch.org/whl/cpu"
python_source
: Spécifiez la source de téléchargement de la bibliothèque python, facultatif cn
et us
, la valeur par défaut est us
. Sélectionnez la source de téléchargement cn
qui utilisera清华源
prédire:
port
: Le numéro de port lorsque le service d'inférence est démarré2⃣️Construire l'image
swan build -t my-dl-image
Paramètres facultatifs de build Swan :
-t
: obligatoire. Spécifiez le nom de la génération d'image, tel que my-dl-image
.-r
: facultatif. Si vous ajoutez ce paramètre, le conteneur sera exécuté une fois l'image créée et le mappage des ports sera effectué : swan build -r -t my-dl-image
-s
: facultatif. Si ce paramètre est ajouté, le Dokefile sera enregistré dans le répertoire après la construction de l'image.3⃣️ Exécutez le conteneur
docker run my-dl-image
Si vous utilisez un GPU
docker run --gpus all my-dl-image