本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
建立 AWS IoT Greengrass V2 元件
AWS IoT Greengrass 使用 元件,這是部署到 並在 AWS IoT Greengrass 核心裝置上執行的軟體模組。您需要 (至少) 三個元件:
-
部署 Edge Manager 代理程式二進位的公有 Edge Manager 代理程式 AWS IoT Greengrass 元件。
-
當您使用 或 AI 主控台封裝機器學習模型時自動產生的模型元件。 AWS SDK for Python (Boto3) API SageMaker 如需相關資訊,請參閱 建立自動產生的元件。
-
採用 Edge Manager 代理程式用戶端應用程式的私有自訂元件,並對推論結果執行任何前處理和後處理。如需如何建立自訂元件的詳細資訊,請參閱建立自動產生的元件或建立自訂 AWS IoT Greengrass 元件。
建立自動產生的元件
使用 產生模型元件,CreateEdgePackagingJob
API並GreengrassV2Component
指定 SageMaker Edge Manager 封裝任務API欄位 PresetDeploymentType
。當您呼叫 CreateEdgePackagingJob
時API,Edge Manager 會在 Amazon S3 中採用 SageMaker AI Neo 編譯的模型,並建立模型元件。模型元件會自動儲存在您的帳戶中。您可以導覽至 AWS IoT 主控台 來檢視任何元件https://console.aws.amazon.com/iot/PresetDeploymentConfig
中指定模型元件名稱,則產生的預設名稱由 "SagemakerEdgeManager"
和 Edge Manager 代理程式封裝任務的名稱組成。下列範例示範如何使用 指定 Edge Manager 來建立 a AWS IoT Greengrass V2 CreateEdgePackagingJob
元件API。
import sagemaker import boto3 # Create a SageMaker client object to make it easier to interact with other AWS services. sagemaker_client = boto3.client('sagemaker', region=
<YOUR_REGION>
) # Replace with your IAM Role ARN sagemaker_role_arn = "arn:aws:iam::<account>:role/*
" # Replace string with the name of your already created S3 bucket. bucket = 'amzn-s3-demo-bucket-edge-manager' # Specify a name for your edge packaging job. edge_packaging_name = "edge_packag_job_demo" # Replace the following string with the name you used for the SageMaker Neo compilation job. compilation_job_name = "getting-started-demo" # The name of the model and the model version. model_name = "sample-model" model_version = "1.1" # Output directory in S3 where you want to store the packaged model. packaging_output_dir = 'packaged_models' packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir) # The name you want your Greengrass component to have. component_name = "SagemakerEdgeManager" + edge_packaging_name sagemaker_client.create_edge_packaging_job( EdgePackagingJobName=edge_packaging_name, CompilationJobName=compilation_job_name, RoleArn=sagemaker_role_arn, ModelName=model_name, ModelVersion=model_version, OutputConfig={ "S3OutputLocation": packaging_s3_output, "PresetDeploymentType":"GreengrassV2Component", "PresetDeploymentConfig":"{\"ComponentName\":\"sample-component-name\", \"ComponentVersion\":\"1.0.2\"}" } )
您也可以使用 SageMaker AI 主控台建立自動產生的元件。依照封裝模型 (Amazon SageMaker AI 主控台)中的步驟 1-6 執行
輸入您要存放封裝任務輸出和選用加密金鑰的 Amazon S3 儲存貯URI體。
完成下列步驟以建立模型元件:
-
選擇預設部署。
-
在元件名稱欄位中指定元件的名稱。
-
選擇性地分別提供元件、元件版本、平台作業系統或元件說明、元件版本、平台作業系統和平台架構的描述。
-
選擇提交。
建立一個 Hello World 自訂元件
自訂應用程式元件可用來在 Edge 裝置上執行推論。元件負責將模型載入 SageMaker Edge Manager、叫用 Edge Manager 代理程式進行推論,以及在元件關閉時卸載模型。在建立元件之前,請確保代理程式和應用程式可以與 Edge Manager 通訊。若要這樣做,請設定 gRPC
若要使用 gRPC,您必須:
-
使用從 Amazon S3 發行儲存貯體下載 Edge Manager 代理程式時提供的 .proto 檔案建立 gRPC stub。
-
使用您喜歡的語言編寫客戶端代碼。
您不需要在 .proto 檔案中定義服務。當您從 Amazon S3 發行儲存貯體下載 Edge Manager 代理程式發行二進位檔時,服務 .proto 檔案會包含在壓縮TAR檔案中。
在主機機器上安裝 gRPC 和其他必要工具,並在 Python agent_pb2.py
中建立 gRPC 短根agent_pb2_grpc.py
和 。確保您的本機目錄中有 agent.proto
。
%%bash pip install grpcio pip install grpcio-tools python3 -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. agent.proto
上述程式碼會從 .proto 服務定義產生 gRPC 用戶端和伺服器介面。換句話說,它會在 Python 中建立 gRPC 模型。API 目錄包含用於與代理程式通訊的 Protobuf 規格。
接著,使用 gRPC API為您的服務寫入用戶端和伺服器 (2)。下列範例指令碼 edge_manager_python_example.py
,使用 Python 將 yolov3
模型載入、列出和卸載至 Edge 裝置。
import grpc from PIL import Image import agent_pb2 import agent_pb2_grpc import os model_path =
'
agent_socket = 'unix:///tmp/aws.greengrass.SageMakerEdgeManager.sock' agent_channel = grpc.insecure_channel(agent_socket, options=(('grpc.enable_http_proxy', 0),)) agent_client = agent_pb2_grpc.AgentStub(agent_channel) def list_models(): return agent_client.ListModels(agent_pb2.ListModelsRequest()) def list_model_tensors(models): return { model.name: { 'inputs': model.input_tensor_metadatas, 'outputs': model.output_tensor_metadatas } for model in list_models().models } def load_model(model_name, model_path): load_request = agent_pb2.LoadModelRequest() load_request.url = model_path load_request.name = model_name return agent_client.LoadModel(load_request) def unload_model(name): unload_request = agent_pb2.UnLoadModelRequest() unload_request.name = name return agent_client.UnLoadModel(unload_request) def predict_image(model_name, image_path): image_tensor = agent_pb2.Tensor() image_tensor.byte_data = Image.open(image_path).tobytes() image_tensor_metadata = list_model_tensors(list_models())[model_name]['inputs'][0] image_tensor.tensor_metadata.name = image_tensor_metadata.name image_tensor.tensor_metadata.data_type = image_tensor_metadata.data_type for shape in image_tensor_metadata.shape: image_tensor.tensor_metadata.shape.append(shape) predict_request = agent_pb2.PredictRequest() predict_request.name = model_name predict_request.tensors.append(image_tensor) predict_response = agent_client.Predict(predict_request) return predict_response def main(): try: unload_model('your-model') except: pass print('LoadModel...', end='') try: load_model('your-model', model_path) print('done.') except Exception as e: print() print(e) print('Model already loaded!') print('ListModels...', end='') try: print(list_models()) print('done.') except Exception as e: print() print(e) print('List model failed!') print('Unload model...', end='') try: unload_model('your-model') print('done.') except Exception as e: print() print(e) print('unload model failed!') if __name__ == '__main__': main()<PATH-TO-SagemakerEdgeManager-COMPONENT>
'
如果您使用相同的用戶端程式碼範例,請確保model_path
指向包含模型的 AWS IoT Greengrass 元件名稱。
產生 gRPC 短根且準備好 Hello World 程式碼後,您就可以建立 AWS IoT Greengrass V2 Hello World 元件。若要這麼做:
-
將您的
edge_manager_python_example.py
、agent_pb2_grpc.py
和agent_pb2.py
上傳到您的 Amazon S3 儲存貯體,並記下他們的 Amazon S3 路徑。 -
在 AWS IoT Greengrass V2 主控台中建立私有元件,並定義元件的配方。將 Amazon S3 指定URI至您的 Hello World 應用程式,並在下列配方中指定 gRPC stub。
--- RecipeFormatVersion: 2020-01-25 ComponentName: com.sagemaker.edgePythonExample ComponentVersion: 1.0.0 ComponentDescription: Sagemaker Edge Manager Python example ComponentPublisher: Amazon Web Services, Inc. ComponentDependencies: aws.greengrass.SageMakerEdgeManager: VersionRequirement: '>=1.0.0' DependencyType: HARD Manifests: - Platform: os: linux architecture: "/amd64|x86/" Lifecycle: install: |- apt-get install python3-pip pip3 install grpcio pip3 install grpcio-tools pip3 install protobuf pip3 install Pillow run: script: |- python3 {
artifacts:path
}/edge_manager_python_example.py Artifacts: - URI:<code-s3-path>
- URI:<pb2-s3-path>
- URI:<pb2-grpc-s3-path>
如需建立 Hello World 配方的詳細資訊,請參閱 AWS IoT Greengrass 文件中的建立您的第一個元件。