FastAPI + Docker¶
设置¶
In [ ]
已复制!
pip install ydf -U
pip install ydf -U
In [1]
已复制!
import ydf
import pandas as pd
import ydf import pandas as pd
In [2]
已复制!
dataset_path = "https://raw.githubusercontent.com/google/yggdrasil-decision-forests/main/yggdrasil_decision_forests/test_data/dataset"
dataset = pd.read_csv(f"{dataset_path}/adult_train.csv")
dataset.head(5)
dataset_path = "https://raw.githubusercontent.com/google/yggdrasil-decision-forests/main/yggdrasil_decision_forests/test_data/dataset" dataset = pd.read_csv(f"{dataset_path}/adult_train.csv") dataset.head(5)
Out[2]
age | workclass | fnlwgt | education | education_num | marital_status | occupation | relationship | race | sex | capital_gain | capital_loss | hours_per_week | native_country | income | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 44 | Private | 228057 | 7th-8th | 4 | Married-civ-spouse | Machine-op-inspct | Wife | White | Female | 0 | 0 | 40 | Dominican-Republic | <=50K |
1 | 20 | Private | 299047 | Some-college | 10 | Never-married | Other-service | Not-in-family | White | Female | 0 | 0 | 20 | United-States | <=50K |
2 | 40 | Private | 342164 | HS-grad | 9 | Separated | Adm-clerical | Unmarried | White | Female | 0 | 0 | 37 | United-States | <=50K |
3 | 30 | Private | 361742 | Some-college | 10 | Married-civ-spouse | Exec-managerial | Husband | White | Male | 0 | 0 | 50 | United-States | <=50K |
4 | 67 | Self-emp-inc | 171564 | HS-grad | 9 | Married-civ-spouse | Prof-specialty | Wife | White | Female | 20051 | 0 | 30 | England | >50K |
我们使用默认参数训练模型
In [3]
已复制!
model = ydf.GradientBoostedTreesLearner(label="income").train(dataset)
model = ydf.GradientBoostedTreesLearner(label="income").train(dataset)
Train model on 22792 examples Model trained in 0:00:01.420861
我们可以生成预测结果以确保模型正常工作
请注意,model.predict
接受一批示例(即示例列表)作为输入。如果我们只有一个示例,则需要为每个特征创建一个包含一个值的列表。
In [4]
已复制!
model.predict({'age': [44],
'workclass': ['Private'],
'fnlwgt': [228057],
'education': ['7th-8th'],
'education_num': [4],
'marital_status': ['Married-civ-spouse'],
'occupation': ['Machine-op-inspct'],
'relationship': ['Wife'],
'race': ['White'],
'sex': ['Female'],
'capital_gain': [0],
'capital_loss': [0],
'hours_per_week': [40],
'native_country': ['Dominican-Republic']})
model.predict({'age': [44], 'workclass': ['Private'], 'fnlwgt': [228057], 'education': ['7th-8th'], 'education_num': [4], 'marital_status': ['Married-civ-spouse'], 'occupation': ['Machine-op-inspct'], 'relationship': ['Wife'], 'race': ['White'], 'sex': ['Female'], 'capital_gain': [0], 'capital_loss': [0], 'hours_per_week': [40], 'native_country': ['Dominican-Republic']})
Out[4]
array([0.02801839], dtype=float32)
对于二分类模型(即可以预测两个类别之一的模型),输出是正向类别的概率
In [5]
已复制!
model.label_classes()[True]
model.label_classes()[True]
Out[5]
'>50K'
将模型打包到 Docker 中¶
model.to_docker(path)
将模型导出到 Docker。
In [6]
已复制!
model.to_docker("my_docker_model")
model.to_docker("my_docker_model")
您可以查看 Docker 内容。在某些高级情况下,您可能需要更新一些自动生成的文件。
In [8]
已复制!
!ls -l my_docker_model
!ls -l my_docker_model
total 4 -rw-rw-r-- 1 gbm primarygroup 288 Jul 26 13:39 deploy_in_google_cloud.sh -rw-rw-r-- 1 gbm primarygroup 211 Jul 26 13:39 Dockerfile -rw-rw-r-- 1 gbm primarygroup 1313 Jul 26 13:39 main.py drwxrwxr-x 1 gbm primarygroup 0 Jul 26 13:39 model -rw-rw-r-- 1 gbm primarygroup 360 Jul 26 13:39 readme.txt -rw-rw-r-- 1 gbm primarygroup 21 Jul 26 13:39 requirements.txt -rw-rw-r-- 1 gbm primarygroup 485 Jul 26 13:39 test_locally.sh
可以在本地使用以下命令部署和测试 Docker
docker build -t ydf_predict_image ./my_docker_model
docker run --rm -p 8080:8080 -d ydf_predict_image
注意:要运行此命令,您需要安装 Docker。
生成的 Docker 目录中的 test_locally.sh
脚本展示了如何生成本地请求。
最后,可以使用以下命令将 Docker 部署到 Google Cloud
gcloud run deploy ydf-predict --source ./my_docker_model
可以使用 Google Cloud Console 监控已部署的模型。
注意:要运行此命令,您需要安装 Google Cloud CLI 并设置一个项目。