肉球でキーボード

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

Python

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 がコン…