日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

使用Blade EAS Plugin優化并部署模型

EAS Plugin是EAS在模型部署前進行統一的前處理機制。基于該機制,Blade推出了Blade EAS Plugin,用于部署前的模型優化。相比直接使用Blade Python Wheel包進行模型優化,Blade EAS Plugin能夠自動嵌入到模型的發布流程中,極大簡化了集成Blade的工程開銷。本文介紹如何通過EAS服務配置文件使用Blade EAS Plugin進行模型優化及部署。

背景信息

目前EAS的TensorFlow和PyTorch Processor已經集成了Blade運行時SDK,因此如果您使用這兩種Processor進行模型部署,則可以通過配置EAS服務配置文件的方式進行模型優化。

說明

啟用Blade EAS Plugin將在EAS服務之前對您提供的模型提前優化,優化過程根據模型復雜程度可能持續3~10分鐘左右,Blade EAS Plugin只在部署EAS服務時執行一次,服務后續縮擴容都直接使用優化后的模型。

目前,Blade EAS Plugin功能只能在通過eascmd客戶端創建服務時啟用。關于如何配置和使用eascmd客戶端,請參見下載并認證客戶端命令使用說明

啟動Blade EAS PluginEAS服務配置文件中增加plugins字段。關于該字段詳情請參見下文的plugins字段。本文也提供了如下示例,以演示如何在PAI-EAS的服務配置文件中啟動Blade EAS Plugin:

plugins字段

啟動Blade EAS Plugin,您只需要在EAS服務配置文件中增加plugins字段。該字段是一個列表,列表包含一個或多個字典元素。關于EAS服務配置文件的字段詳情,請參見創建服務

每個字典元素包含的key如下表所示。

表 1. plugins包含的字段

key

是否必選

描述

command

運行的優化命令,取值請參見下文的Processor與Plugin鏡像的對應表

image

Blade EAS Plugin的鏡像地址。Blade EAS Plugin目前支持TensorFlow和PyTorch框架,支持CPU和GPU(CUDA 10.0)兩種設備,對應的Processor名稱與Plugin鏡像地址如下文的Processor與Plugin鏡像的對應表所示。

resource

執行優化的資源組。您需要將該參數與服務描述文件最外層表示EAS服務運行資源組的resource字段區分開。

如果進行GPU優化,則必須配置該參數。在華東1(杭州)和華東2(上海)兩個地域可以使用T4_8CORE資源組執行Blade EAS Plugin。此外,在華東2(上海)還可以使用V100_8CORE或P4_8CORE資源組。

說明

對于GPU而言,執行Blade EAS Plugin的資源組卡型需要與最終創建EAS服務的資源組的卡型一致。

gpu

優化時使用的GPU數量,通常取值為1。

config

高級優化配置項。目前只有model_info一個子項。

model_info中可以配置多個模型的優化項,目前只支持配置一個模型的優化項。

模型的key為模型的文件名,value支持多個優化項,這些優化項與PAI-Blade Wheel包中的blade.optimize接口參數對齊。支持的優化項如下文的優化項列表所示。

表 2. Processor與Plugin鏡像的對應表

設備類型

key

value

CPU

image(Blade EAS Plugin鏡像地址)

registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest

command(插件運行的優化命令)

blade --mode eas_plugin --optimize_for cpu

processor

  • TensorFlow Processor對應的value為tensorflow_cpu_1.15

  • PyTorch Processor對應的value為pytorch_cpu_1.6

GPU

image(Blade EAS Plugin鏡像地址)

  • CUDA 10.0:registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest

  • CUDA 11.0:registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cu110_latest

command(插件運行的優化命令)

blade --mode eas_plugin --optimize_for gpu

processor

  • TensorFlow 1.15(CUDA 10.0)對應的value為tensorflow_gpu_1.15

  • Tensorflow 2.4(CUDA 11.0)對應的value為tensorflow_gpu_2.4

  • PyTorch 1.6(CUDA 10.0)對應的value為pytorch_gpu_1.6

  • PyTorch 1.7(CUDA 11.0)對應的value為pytorch_gpu_1.7

表 3. 優化項列表

優化項

描述

optimization_level

optimization_level分為以下兩個等級:

  • o1:默認值,表示無損精度優化,根據實際使用硬件嘗試FP32或FP16優化,以保證精度損失在一個極小的閾值范圍內。

  • o2:表示開啟INT8量化。對于支持INT8的硬件可以開啟該優化級別。

test_data

測試數據文件,可選。測試數據文件需要包含在model_path指定的路徑或壓縮包中。建議您提供一組可以正常進行模型推理的真實測試數據(尤其是PyTorch模型優化)。關于測試數據文件的生成方式請參見下文的用于優化的輔助數據

calibration_dataset

量化校準數據文件,可選。量化校準數據文件需要包含在model_path指定的路徑或壓縮包中。

如果沒有指定該字段,則進行Online INT8量化。如果指定了該字段,則進行Offline INT8量化。

通常建議您提供100條以上的校正數據。量化校準數據文件的生成方式請參見下文的用于優化的輔助數據

inputs

字符串列表,可選。該參數表示模型輸入節點的名稱。如果沒有指定該參數,Blade會將沒有上游的節點作為輸入節點。

PyTorch模型無需指定該參數。

outputs

字符串列表,可選。該參數表示模型輸出節點的名稱。如果沒有指定該參數,Blade會將沒有下游的節點作為輸出節點。

PyTorch模型無需指定該參數。

input_shapes

輸入Tensor可能的形狀,用于提升特定場景的優化效果。內層列表元素個數必須等于模型輸入Tensor的數量,每個元素是一個字符串,表示某種輸入的形狀,例如'1*512'

如果有多組可能的形狀,則在外層列表中增加元素即可。例如,有兩個輸入的模型可能有如下形狀或若干組可能的形狀,取值示例如下:

  • [['1*512', '3*256']]

  • [              
        ['1*512', '3*256'],
        ['5*512', '9*256'],     
        ['10*512', '27*256']      
    ]

input_ranges

每個輸入Tensor的元素取值范圍。內層列表元素數量必須等于模型輸入Tensor的數量,每個元素是一個字符串,表示某種取值范圍。

取值范圍可以使用方括號加實數或字符表示,例如'[1,2]''[0.3,0.9]''[a,f]'

如果有多組可能的取值范圍,則在外層列表中增加元素即可。例如,有兩個輸入的模型可能有如下取值范圍或若干組可能的取值范圍,取值示例分別如下:

  • [['[0.1,0.4]', '[a,f]']]

  • [           
        ['[0.1,0.4]', '[a,f]'],
        ['[1.1,1.4]', '[h,l]'],     
        ['[2.1,2.4]', '[n,z]']      
    ]

quantization

該參數是一個JSON字典,目前僅支持唯一的key值weight_adjustment,表示是否嘗試調整模型參數以減小量化精度損失。該key值對應的value支持如下取值:

  • "true":開啟該選項。

  • "false":關閉該選項。

用于優化的輔助數據

在O1優化級別中,提供test_data可以使優化更具指向性。在O2優化級別中,提供calibration_dataset可以指導Blade進行離線INT8優化。這兩個參數均需符合Blade的優化輔助數據格式。TensorFlow和PyTorch的優化輔助數據格式如下所示:

  • TensorFlow的輔助數據是List of Feed Dict格式。Feed Dict的key是字符串,value是numpy的ndarray。輔助數據文件保存為 .npy文件。

  • PyTorch的輔助數據是List of Tensor Tuple格式,保存為.pth文件。

您可以參考如下示例代碼生成TensorFlow的輔助數據文件。

import numpy as np

calib_data = list()
for i in range(10):
    feed_dict = {
        'image_placeholder:0': np.ones((8, 3, 224, 224), dtype=np.float32),
        'threshold_placeholder:0': np.float32(0.5),
    }
    calib_data.append(feed_dict)
np.save("calib_data.npy", calib_data)

您可以參考如下示例代碼生成PyTorch的輔助數據文件。

import numpy as np
import torch

calib_data = list()
for i in range(10):
    image = torch.ones(8, 3, 224, 224)
    threshold = torch.tensor(0.5)
    feed_tuple = (image, threshold)
    calib_data.append(feed_tuple)
torch.save(calib_data, 'calib_data.pth')

示例1:不使用Blade EAS Plugin

如下是一個簡單的、不使用Blade EAS Plugin的EAS服務配置文件。

{
  "name": "blade_eas_plugin_test",
  "model_path": "oss://<yourBucket>/<pathToYourModel>/",
  "processor": "tensorflow_cpu_1.15",
  "metadata": {
    "instance": 1,
    "memory": 4000
  },
  "resource": "<yourEASResource>"
}

關于EAS服務配置文件的字段詳情,請參見創建服務

將以上服務配置文件保存為service.json,使用如下命令即可創建一個部署在CPU上的TensorFlow 1.15服務。

eascmd create service.json

系統輸出類似如下結果。

+-------------------+-------------------------------------------------------------------------------------------------+
| Internet Endpoint | http://123456789012****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test       |
| Intranet Endpoint | http://123456789012****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test   |
|             Token | owic823JI3kRmMDZlOTQzMTA3ODhmOWIzMmVkZmZmZGQyNmQ1N2M5****                                        |
+-------------------+-------------------------------------------------------------------------------------------------+
[OK] Service is now creating
[OK] Schedule process to node cn-shanghai.i-uf6hv6kfua25q1k8****
[OK] Fetching processor from [http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/3.18.0/py3.6.8_cpu_tf1.15.0_torch1.6.0_abiprecxx11/TENSORFLOW_SDK_CPU.d12d3dc-91024d0-1.15.0-Linux.tar.gz]
[OK] Successfully downloaded all artifacts
[OK] Building image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Pushing image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Successfully pushed image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117170541
[OK] Successfully created ingress
[OK] Successfully synchronized resources
[OK] Waiting [Total: 1, Pending: 1, Running: 0]
[OK] Running [Total: 1, Pending: 0, Running: 1]
[OK] Service is running

示例2:使用Blade EAS Plugin的簡單示例

啟動Blade EAS Plugin,您只需要在EAS服務配置文件中增加plugins字段。該字段是一個列表,在如下示例中只有一個Blade的優化插件,所以列表中只有一個字典元素。

{
  "name": "blade_eas_plugin_test",
  "model_path": "oss://<yourBucket>/<pathToYourModel>/",
  "processor": "tensorflow_cpu_1.15",
  "metadata": {
    "instance": 1,
    "memory": 4000
  },
  "plugins": [
      {
          "command": "blade --mode eas_plugin --optimize_for cpu",
          "image": "registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest"
      }
  ],
  "resource": "<yourEASResource>"
}

上述示例中的除 plugins外,其他字段仍然遵循PAI-EAS服務配置文件的格式,詳情請參見創建服務plugins列表下的字典元素包含如下兩個key:

  • command字段:表示運行的優化命令。其中--mode eas_plugin表示執行EAS Plugin優化模式,--optimize_for cpu表示為CPU推理進行優化。

  • image字段:表示Blade EAS Plugin的鏡像地址,所有CPU優化都使用鏡像registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest

上述示例即完成了CPU設備上不帶測試數據的優化配置。將以上服務配置文件保存為service1.json,通過eascmd客戶端工具的create命令即可創建服務,如下所示。

eascmd create service1.json

系統輸出類似如下結果。

+-------------------+-------------------------------------------------------------------------------------------------+
| Internet Endpoint | http://123456789012****.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test       |
| Intranet Endpoint | http://123456789012****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test   |
|             Token | owic823JI3kRmMDZlOTQzMTA3ODhmOWIzMmVkZmZmZGQyNmQ1N2M5****                                       |
+-------------------+-------------------------------------------------------------------------------------------------+
[OK] Service is now creating
[OK] Fetching processor from [http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/3.18.0/py3.6.8_cpu_tf1.15.0_torch1.6.0_abiprecxx11/TENSORFLOW_SDK_CPU.d12d3dc-91024d0-1.15.0-Linux.tar.gz]
[OK] Successfully downloaded all artifacts
[OK] Executing plugin eas-plugin-73d70d54: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest
[OK] Building image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Pushing image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Successfully pushed image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117172259
[OK] Successfully created ingress
[OK] Successfully patch resources
[OK] Waiting [Total: 1, Pending: 1, Running: 0]
[OK] Running [Total: 1, Pending: 0, Running: 1]
[OK] Service is running

觀察上述日志,您可以發現對比不啟動Blade EAS Plugin的配置,多了如下一行日志,表示成功執行了Blade優化。

[OK] Executing plugin eas-plugin-73d70d54: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:cpu_latest

示例3:使用Blade EAS Plugin的復雜示例

通常情況下,提供更多有關模型的信息有助于提升優化的準確性和加速比。以下示例帶有更多優化參數,且以GPU為例,服務描述文件如下所示。

{
    "name": "blade_eas_plugin_test",
    "metadata": {
        "cpu": 4,
        "gpu": 1,
        "instance": 1,
        "memory": 4096,
        "cuda": "10.0"
    },
    "model_path": "oss://<yourBucket>/<pathToYourModel>/",
    "plugins": [
        {
            "command": "blade --mode eas_plugin --optimize_for gpu",
            "image": "registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest",
            "resource": "T4_8CORE",
            "gpu": 1,
            "config": {
                "model_info": {
                    "frozen.pb": {
                        "optimization_level": "o1",
                        "inputs": [
                            "input_ids_a_1"
                        ],
                        "outputs": [
                            "l2_normalize"
                        ],
                        "test_data": "test_len9240_bc1.npy"
                    }
                }
            }
        }
    ],
    "processor": "tensorflow_gpu_1.15",
    "resource": "<yourEASResource>"
}

上述示例中除 plugins外,其他字段仍然遵循EAS服務配置文件的格式,詳情請參見創建服務plugins包含的字段詳情請參見上文的plugins包含的字段。此外,上述服務配置文件中的frozen.pb是模型的文件名,表示優化fronzon.pb文件中的TensorFlow模型。

將以上服務配置文件保存為service2.json,通過eascmd客戶端工具的create命令即可創建服務,如下所示。

eascmd create service2.json

系統輸出類似如下結果。

+-------------------+-------------------------------------------------------------------------------------------------+
| Internet Endpoint | http://123456789012****cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test      |
| Intranet Endpoint | http://123456789012****.vpc.cn-shanghai.pai-eas.aliyuncs.com/api/predict/blade_eas_plugin_test  |
|             Token | owic823JI3kRmMDZlOTQzMTA3ODhmOWIzMmVkZmZmZGQyNmQ1N2M5****                                        |
+-------------------+-------------------------------------------------------------------------------------------------+
[OK] Service is now creating
[OK] Schedule process to node cn-shanghai.i-uf642ocg20xinsme****
[OK] Downloading oss file: oss://blade-qa/test_assets/tf_security_textcnn/
[OK] Fetching processor from [http://pai-blade.oss-cn-zhangjiakou.aliyuncs.com/release/3.18.0/py3.6.8_cu100_tf1.15.0_torch1.6.0_abiprecxx11/TENSORFLOW_SDK_GPU.d12d3dc-91024d0-1.15.0-Linux.tar.gz]
[OK] Successfully downloaded all artifacts
[OK] Executing plugin eas-plugin-7126ee68: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest
[OK] Building image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Pushing image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Successfully pushed image registry-vpc.cn-shanghai.aliyuncs.com/eas/blade_eas_plugin_test_cn-shanghai:v0.0.1-20211117191732
[OK] Successfully created ingress
[OK] Successfully synchronized resources
[OK] Waiting [Total: 1, Pending: 1, Running: 0]
[OK] Running [Total: 1, Pending: 0, Running: 1]
[OK] Service is running

觀察上述日志,您可以發現對比不啟動Blade EAS Plugin的配置,多了如下一行日志,表示成功執行了Blade優化。

[OK] Executing plugin eas-plugin-7126ee68: registry.cn-shanghai.aliyuncs.com/eas/pai-blade-deploy:gpu_latest