构建预测应用:从模型保存到部署测试全流程指南
立即解锁
发布时间: 2025-08-29 10:19:02 阅读量: 5 订阅数: 8 AIGC 

# 构建预测应用:从模型保存到部署测试全流程指南
## 1. TensorFlow SavedModel APIs
TensorFlow SavedModel 有两个主要的 API,分别是 Builder API 和 Loader API。当 Loader API 加载 SavedModel 后,就可以用于预测。
### 1.1 SavedModelBuilder 类
SavedModelBuilder 类提供了多个元图定义、相关变量和属性的保存功能。为了构建 SavedModel,第一个元图必须和变量一起保存,后续的元图则可以仅保存图描述。在插入元图定义时,可以提供需要保存并写入或复制到磁盘的属性。如果多个元图定义关联到同名的资源,只有第一个版本会被保留。每个 SavedModel 元图都必须用标签进行注释,这些标签反映了元图的功能和特定用例的用户标签,通常包括元图的属性(如服务或训练)以及可能的硬件特定方面(如 GPU)。Loader API 会加载标签集与之一致的元图,如果没有匹配的元图定义,将返回错误。
以下是使用 Builder API 的示例代码:
```python
# 此处虽未给出具体代码,但表示可用 Builder API 进行相关操作
```
使用 SavedModelBuilder 包时,用户可以测试在添加 SavedModel 包元图时是否需要从 NodeDefs 中移除默认评估的属性。`SavedModelBuilder.add_meta_gram_and_variables` 和 `SavedModelbuilder.add_meta_graph` 都接受一个 `strip_default_attribute` 布尔标志来控制此行为。模型生产者可以通过将 `strip_default_attrs` 设置为 `True` 来移除 NodeDefs 中任何有值的默认属性,这有助于确保具有默认值的新属性不会导致旧的模型消费者无法加载使用新训练二进制文件重新生成的模型。
### 1.2 Loader APIs
Loader APIs 有 C++ 和 Python 两种实现方式。
#### 1.2.1 Python 版 SavedModel 加载器
Python 版的 SavedModel 加载器包括 SavedModel 的加载和恢复功能。`load` 功能包括恢复图描述和变量的会话、用于定义元图加载默认值的标签以及 SavedModel 的位置。特定元图定义中提供的变量和资源子集在加载时会恢复到提供的会话中。以下是代表性的 Python 代码:
```python
# 此处虽未给出具体代码,但表示可用 Python 实现加载器功能
```
#### 1.2.2 C++ 版 SavedModel 加载器
C++ 版的 SavedModel 加载器提供了一个从路径加载 SavedModel 的 API,允许使用 `SessionOptions` 和 `RunOptions`。与 Python 版相比,C++ 版需要加载和定义与图关联的标签。加载的这个版本的 SavedModel 称为 `SavedModelBundle`,包括元图定义和加载会话。以下是代表性的 C++ 代码:
```cpp
// 此处虽未给出具体代码,但表示可用 C++ 实现加载器功能
```
SavedModel 为构建和加载各种应用的 TensorFlow 图提供了灵活性。SavedModel APIs 在 Python 和 C++ 中提供了许多常量,这些常量易于使用,并且在最常见的预期应用的工具之间可以一致共享。
## 2. 在 GCP 上部署模型
在导出机器学习模型后,需要将其部署。部署模型的第一步是将它们存储在 Google Cloud Storage 存储桶中。一般来说,为 Google Cloud AI 平台的同一项目使用专用的云存储桶会更方便。如果使用不同项目的存储桶,需要确保在 Google Cloud AI 平台服务账户中有权限访问云存储模型,否则构建 Google Cloud AI 平台模型版本的尝试将失败。
### 2.1 创建 Google Cloud Storage 存储桶
可以使用现有的存储桶,但它必须位于计划在 Google Cloud AI 平台上工作的同一区域。以下代码可帮助创建新的存储桶:
```bash
BUCKET_NAME="google_cloud_ai_platform_your_bucket_name"
PROJECT_ID=$(gcloud config list project --format "value(core.project)")
BUCKET_NAME=${PROJECT_ID}-mlengine
echo $BUCKET_NAME
REGION=us-east2
gsutil mb -l $REGION gs://$BUCKET_NAME
```
上述代码指定了新存储桶的名称,定义了创建存储桶所需的项目 ID,指定了要创建存储桶的区域,最后使用 `gsutil` 命令行界面(CLI)创建存储桶。`gsutil` 工具的完整参考可在 [此处](https://cloud.google.com/storage/docs/gsutil) 找到。
也可以通过 GCP 控制台 UI 创建存储桶,步骤如下:
1. 从控制台菜单导航到 Storage 部分,点击 Browser 部分以定位存储桶中存储的所有数据文件。
2. 如果用户账户有权限创建多区域存储桶,使用此控制台 UI 可以在一个地方查看所有区域存储桶中的数据文件。
3. 点击 CREATE BUCKET 按钮,会打开创建新存储桶的初始页面。
4. 需要提供在项目中唯一的存储桶名称、区域、默认存储类,并定义访问级别(可以访问存储桶的用户组和用户)。
5. GCP 会提供一个界面,方便查看创建和持有存储桶中数据的每月成本估算,这有助于根据用例和应用上下文选择合适的选项,避免因配置不当而产生高额成本。
### 2.2 将保存的模型上传到 Google Cloud Storage 存储桶
上传模型到 Google Cloud Storage 存储桶的步骤如下:
- **TensorFlow SavedModels**:如果使用 TensorFlow SavedModels,可以使用以下代码上传模型:
```bash
SAVED_MODEL_DIR=$(ls ./your-export-dir-base | tail -1)
gsutil cp -r $SAVED_MODEL_DIR gs://your-bucket
```
如果从 `tf.keras` 或 TensorFlow 估计器导出 SavedModel,选择的导出目录的子目录会以时间戳保存,如 `your-code-base-directory/123201202301`。此示例展示了如何使用当前时间戳更新目录。如果以其他方式构建了 SavedModel,可以将其放在本地文件系统的其他位置。
- **scikit-learn 或 XGBoost 模型**:如果使用 scikit-learn 或 XGBoost 导出模型,可以使用以下代码以 `.joblib`、`*.pk1` 或 `*.bst` 格式导出模型:
```bash
gsutil cp ./model.joblib gs://your-bucket/model.joblib
gsutil cp ./model.pkl gs://your-bucket/model.pkl
gsutil cp ./model.bst gs://your-bucket/model.bst
```
- **自定义预测例程**:如果有自定义预测例程(beta),还可以将一些额外的示例对象上传到应用目录。如果使用的是旧版机器(MLS1)类型,配置目录的最小文件大小必须为 500 MB 或更小;如果使用的是 Compute Engine(N1)类型机器(beta),则为 2 GB 或更小。在构建模式的后续迭代时,将它们存储在云存储桶的单独目录中。此外,如果部署带有自定义代码的科学学习管道或自定义预测例程,还需要上传包含自定义代码的源交付包,示例代码如下:
```bash
gsutil cp dist/google_cloud_ai_custom_code-1.0.tar.gz gs://ai-ml-bucket/google_cloud_ai_custom_code-1.0.tar.gz
```
## 3. 测试机器学习模型
机器学习模型测试非常重要,因为机器学习应用并非 100% 准确,且由于这些程序是从用于构建算法的数据中学习,而机器学习应用几乎每天都处理人类活动,一个错误可能导致严重损失。
### 3.1 测试的多个方面
- **训练数据质量**:测试训练数据时,要确保没有会使结果产生偏差的数据集。训练数据的质量保证(QA)
0
0
复制全文
相关推荐









