肉球でキーボード

MLエンジニアの技術ブログです

Python

プライベートサブネット内のlambdaからVPC Endpoints経由でSESを実行する

構成 プライベートサブネット内で起動したlambda関数から、インターネットを経由せずSESを呼び出そうと思います。 本記事では以下の構成でlambda関数からSESを呼び出します。 acrhitecture 本文中コード. github.com lambdaからSESにアクセスする手段 プライ…

Pythonプロジェクトでflat layoutではなくsrc layoutが推奨される理由を理解する

本文中コード github.com flat layoutとsrc layoutについて Pythonプロジェクトのディレクトリ構成について調べてたところ、flat layoutとsrc layoutという2種類のディレクトリ構成が存在することを知りました。 src レイアウト対フラットレイアウト - Pytho…

pythonのテスト環境作成ツールNoxを使う

本文中コード github.com Noxとは Noxはテスト用のpython仮想環境を作成し、テストを自動化するコマンドラインツールです。 Welcome to Nox — Nox 2024.10.9 documentation Noxを利用することで以下のことを実現できます。 チームメンバーのローカルPC上の環…

GlueJobのicebergテーブル処理テストをローカルで実行する

AWS Glue Jobによるicebergテーブル操作 AWS Glueではicebergテーブルフォーマットがサポートされています。 AWS Glue での Iceberg フレームワークの使用 - AWS Glue iceberg形式は大規模なデータセットを効率的に処理を行うことができる、データレイクに保…

LocalStackのS3環境を利用したAWS Glue Jobローカル実行・テスト方法

Glue Jobのローカル開発 AWS Glue Jobをローカル環境で開発する際、AWS公式が提供してるDocker imageを活用する方法があります。 Developing and testing AWS Glue job scripts locally Glue Jobを利用する場合、S3からデータを取得・保存するユースケースが…

Prefect 3.0のアップデートで必要な対応項目

Prefect 3.0とは 2024年6月にPrefect 3.0のtechnical preview版がリリースされました。 Introducing Prefect 3.0 2022年7月にPrefect 2.0がリリースされたので、2年ぶりのメジャーアップデートとなります。 Prefect 1.0から2.0へのメジャーアップデートの際…

LLM AgentワークフローツールControlFlowを動かしてみる

ControlFlowとは Prefect社が2024年6月に公開した、LLM Agentワークフローを構築するOSSのPythonフレームワークです。 公式リリース記事: Agentic LLM Workflows | ControlFlow by Team Prefect 上記事ではLLMを含むワークフローの構築には、3つの課題が存在…

pyenv-virtualenv initでプロンプト表示速度が低下する問題

問題 ~/.zshrcに記述した eval "$(pyenv virtualenv-init -)" によって、zshのプロンプト表示が遅くなってることに気づきました。 原因と解決方法を調べたのでまとめました。 結論 ~/.zshrcに記述するのを eval "$(pyenv virtualenv-init -)" ↓ eval "$(pyen…

PrefectワークフローをKubernetes Jobで実行する

この記事は MLOps Advent Calendar 2023の20日目の投稿記事です。 PrefectワークフローをKubernetes Jobで実行する方法を紹介します。 本文中コード: code-for-blogpost/prefect_gke at main · nsakki55/code-for-blogpost · GitHub Prefect × Kubernetes Pr…

Prefect WorkerをKubernetesにデプロイする

Prefect 2.10以降、インフラ管理の方法はAgentが非推奨となりWorkerが推奨となりました。 PrefectのWorkerについてのまとめ、KubernetesにWorkerをデプロイする場合のmanifestを紹介します。 本文中コード: code-for-blogpost/prefect_kubernetes_worker at …

パケットをゼロから自作してPythonのsocket通信で送る

ゼロから自作したパケットをpythonのsocket通信を用いてサーバーに送信します。 SYNフラグのパケットをサーバーに送り、SYN, ACKフラグのパケットが返ってくるところまで確認します。 実行環境 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE=20…

Pythonメモリプロファイルツールmemrayを使う

Pythonのメモリプロファイルを行うためにmemrayを使用したところ、インストールからプロファイル実行まで手軽にでき、レポート方法が豊富で使い勝手が良かったので使用方法を紹介します。 本文中コード:code-for-blogpost/memray at main · nsakki55/code-f…

GitHub ActionsでPrefectのdeploymentを一括登録する

概要 Prefectを本番運用する場合、Flowの実行設定であるDeploymentをPrefect Cloudに登録する必要があります。 Prefectでワークフローを運用する場合、FlowとDeploymentをGitHubレポジトリでコード管理するケースが多いと思います。 この記事では、レポジト…

PrefectでSub Flowごとに実行環境を分ける方法

概要 PrefectではFlow内部で別のFlowを実行する、Sub Flowという概念があります。 Flows - Prefect Docs 例えばMLの学習パイプラインを 学習データの取得 前処理 学習 のように処理に分ける場合、各処理を1つのFlowとしてグループ化できます。 Sub Flowを呼…

PrefectのFlow実行名を変更する

PrefectでFlow実行名を変更する方法を紹介します。 本文中コード: code-for-blogpost/prefect_rename_flow at main · nsakki55/code-for-blogpost · GitHub flow実行名の変更について PrefectのFlow実行名は、デフォルトではランダムに名前が割り当てられま…

pythonパッケージ管理ツールryeを使う

Pythonパッケージ管理ツール ryeの使い勝手がよかったので使用方法をまとめました。 ryeとは GitHub: https://github.com/mitsuhiko/rye flaskの作者である Armin Ronacher氏 (GitHubアカウント @mitsuhiko)が個人利用目的で作成した、Pythonのパッケージ関…

Prefect FlowをECS Taskで実行する方法

概要 PrefectではInfrastructure blockにECS Task Blockを指定することで、FlowをECS Taskで実行することができます。 本記事では、FlowをECS Taskで実行する2パターンの手順を紹介します。 本文中コード: https://github.com/nsakki55/prefect-ecs-task-flo…

Prefect 2.0に入門する

本文中のコード github.com Prefect 2.0 2022年7月にPrefect 2.0が正式リリースされました。 Prefect1.0のサポートが2023年5月1日に終了するため、Prefect 2.0への移行が必須となっています。 Prefect 1.0から2.0に移行するメリットは次のmediumの記事が参考…

AWS PrivateLinkを介したSageMaker Endpointへのリクエスト手順

PrivateLinkによる低レイテンシー推論 SageMaker 公式ドキュメントで、SageMaker Endpointの低レイテンシー推論のベストプラクティスとして、PrivateLinkの利用が紹介されています。 低レイテンシーのリアルタイム推論AWS PrivateLink - Amazon SageMaker リ…

SageMaker Endpointのレイテンシーを負荷試験ツールlocustで計測する

この記事はMLOps Advent Calendar 2022にリンクしてます。 SageMaker Endpointのレイテンシーを、負荷試験ツールLocustで計測してみました。 本文中のコード: https://github.com/nsakki55/code-for-blogpost/tree/main/sagemaker_endpoint_latency_check 記…

SageMaker Model Monitor ・Clarify でML監視を実践してみる

SageMaker Model MonitorとSageMaker Clarifyを使用して、ML監視を実践してみます。 本文中コード: https://github.com/nsakki55/code-for-blogpost/tree/main/sagemaker_model_monitoring ML監視 MLモデルの予測性能は、データと密接に関わっています。 本…

「現場で役立つシステム設計の原則」サンプルコードをPythonで書く

はじめに 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法~ のJavaで書かれたサンプルコードをPythonで書いてみました。 本書はシステム設計の名著として有名で、コード・システムを綺麗に維持し続けるためのテクニックが…

python のプライベート変数を使う場面

private 変数とは? Python には外部からアクセスができない厳密な意味で private な機能は用意されていません。 代わりに、アンダースコアを属性名の先頭につけることで、プログラマに private な属性であることを明示する機構があります。 PEP8 の命名方法…

pymock でモック化した関数の特定の引数の値を取得する方法

pymock でモック化した際に、モックが呼び出された時の特定の引数の値を取得する機会があったのでやり方を紹介します。 やりたいこと 以下のような、外部で定義した関数(例: calc_sum)を呼び出す処理を行うメソッド(例: process_{one, two})をテストする際に…

setup.py をg++で明示的にコンパイルする

Mac で g++ でコンパイルされた setup.py を実行しようとすると、clang でコンパイルされ困ったので、解決策を書き留めておきます。 ハマった内容 Cython で書かれた python パッケージを setup.py でインストールする際に、Mac の Xcode 付属のclang がコン…