LoginSignup
0
0

SageMakerのリアルタイム推論エンドポイントで使用しているPythonパッケージの一覧を取得する

Last updated at Posted at 2023-12-28

はじめに

SageMaker のリアルタイム推論エンドポイントで使用している(モデルコンテナにインストールされている)全ての Python パッケージの、パッケージ名とバージョンの一覧を取得したいというタイミングがありました。

その際にやったことをまとめます。

やったこと

リアルタイム推論エンドポイントの推論コード(カスタムスクリプト)内に、以下の Python コードを仕込んで推論を実行すると、ログ(CloudWatch Logs)にpip freezeの形式で結果が出力されます。

import subprocess
result = subprocess.run(['pip', 'list', '--format', 'freeze'], stdout=subprocess.PIPE, text=True).stdout
print(result)

また、エンドポイントから S3 へアクセス可能な場合、以下のように S3 へテキストファイルを出力することもできます。

import boto3
import subprocess

result = subprocess.run(['pip', 'list', '--format', 'freeze'], stdout=subprocess.PIPE, text=True).stdout

s3_client = boto3.client('s3')
bucket_name = '<S3バケット名>'
file_name = 'pip_freeze_output.txt'
s3_client.put_object(Bucket=bucket_name, Key=file_name, Body=result)

お行儀が悪くないか?

本来、推論エンドポイントのモデルコンテナ内部に直接アクセスしたい場合は、AWS Systems Manager (SSM) を使用するように公式ドキュメントで言及されています。

この AWS Systems Manager (SSM) を使用するには、カスタマーサポートに連絡してアカウントをホワイトリストに登録してもらうという手順を踏む必要があります。

この辺りの公式ドキュメントの記載を全無視して、モデルコンテナ内部で、Python のsubprocessでコマンド実行しちゃっていいの?という疑問はありました。

AWSサポートに問い合わせてみた

AWSサポートに問い合わせてみたところ、Python のsubprocessでコマンド実行しても問題ないとのことでした。

むしろ、AWSサポートのエンジニアからも「Python のsubprocessでコマンド実行する方が手っ取り早いよ」と提案されました。

聞いてみるもんですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0