Timeline¶
pixiを触ってみた
この記事では、conda上に構築された高速なパッケージマネージャー「pixi」を試してみました。Pythonプロジェクトでの環境管理や依存関係の解決方法を具体的に解説し、CUDA環境でのサンプル実行時の設定や注意点についても述べています。複数の言語やOSに対応したpixiの利便性と実装上の課題を詳しく紹介します。
yqを使ってyamlの配列の値でforループを回す
この記事では、`yq`を使用してYAMLファイル内の配列の値でforループを回す方法を紹介します。具体的なYAMLファイルの例と、`yq`コマンドを使ったforループの実行方法を解説しています。これにより、YAMLファイルの配列要素に対して効率的に処理を行う方法を示しています。
typosを使ってtypoを見つける
この記事では、スペルミスを検出・修正するツールである`typos`の使用方法を紹介します。`typos`のインストール手順と、カレントディレクトリ内のファイルを検査する基本的な使い方を解説しています。さらに、`--write-changes`オプションを使用してスペルミスを自動修正する方法についても説明しています。
uvを使ったtorchの依存管理
この記事では、非常に高速なPythonパッケージインストーラー兼リゾルバーである`uv`を使用してtorchの依存管理を行う方法を紹介します。`uv`の特徴や利点を解説し、torchとtorchvisionのインストール時に必要な工夫について具体的な手順を示しています。特に、`uv`の現時点での制約とその対策について詳述しています。
torchの実行環境をレポートする
問題が起きた時やベンチマークの計測などをする際にPyTorchの実行環境を出力する方法を紹介します。
tfupdateを使ってterraformのバージョンを一括で更新する
tfupdateを使ってterraformのバージョンを一括で更新する。tfupdateはcore, provider, moduleのバージョンを更新するツール。ディレクトリを再帰的に探索し、まとめて更新できる。
textlintを使ってみた
textlintを使ってみた。textlintは日本語の文章の文法的におかしなところを指摘してくれるツール。プラグインのprhを使えば表記ゆれの統一もできる。
Terraform Random Providerを使ってみた
この記事では、TerraformのRandom Providerを使用してランダムな値を生成する方法を紹介します。`keepers`を利用してリソースの再作成を行う具体的な手順を解説しています。実際のコード例を通じて、ランダムな値の生成とリソース管理の方法を示しています。
Terraformで特定のリソースごとにコマンドを実行する
この記事では、Terraformで特定のリソースごとにコマンドを実行する方法を紹介します。`terraform state show`、`terraform plan`、`terraform apply`、`terraform destroy`コマンドを使用して、特定のモジュールやリソースに対して操作を行う具体的な手順を解説しています。実際のコマンド例を通じて、効率的なリソース管理方法を示しています。
Terraform localsでkey, value値を定義する
この記事では、Terraformで`locals`ブロックを使用してkey-valueペアを定義する方法を紹介します。Pythonの辞書型のようなデータ構造を利用し、リソース作成時に参照する具体的な手順を解説しています。実際のコード例を通じて、効率的なデータ管理方法を示しています。
Terraform で Git コミットの SHA を取得する
この記事では、TerraformでGitのコミットSHAを取得してリソースに設定する方法を紹介します。`external`データソースを使用して`git log`コマンドの結果をTerraformの変数に取り込み、S3バケット名にSHAを組み込む具体例を解説しています。
Terraform Dynamic Blockで動的にリソースを設定する
この記事では、TerraformのDynamic Blockを使用してリソースの設定を動的に行う方法を紹介します。繰り返しや条件分岐を活用して、設定をDRYに記述する具体的な手法を解説しています。実際の設定例を通じて、Dynamic Blockの効果的な活用方法を示しています。
slackで質問テンプレートを作って解決までの時間を短縮する
この記事では、Slackで質問テンプレートを作成してチームの解決までの時間を短縮する方法を紹介します。GitHubのIssueテンプレートを参考に、SlackのWorkflow Builderを活用して効果的な質問フォームを構築する具体的な手順を解説しています。これにより、コンテキストの共有が容易になり、コミュニケーションのラリーを減らすことが可能になります。
公開求人を効率良く探す
この記事では、Googleの`site:`検索を活用してHRMOS、Talentio、Herpなど特定の求人サイトに限定し、効率的に公開求人を探す方法を紹介します。具体的な検索例を示し、海外の求人サイトを対象とする際のURL指定方法についても解説しています。また、`site:`指定をしていない求人情報の検索方法や自社サイトの求人情報探索についての注意点も述べています。
ScaleneでPythonのプロファイリングを行う
この記事では、Pythonの高性能なCPU、GPU、およびメモリプロファイリングツールであるScaleneの使用方法を紹介します。Scaleneの特徴や利点を解説し、インストール手順から実際のプロファイリングの実行方法まで具体的に説明しています。また、CLIやWebベースのGUIを活用した詳細なプロファイリングオプションについても詳述しています。
[PyYAML] 参照による抽象化をやめる
この記事では、PyYAMLを使用してYAMLを出力する際に、同一データの参照による抽象化を防ぐ方法を紹介します。具体的には、Dumperクラスを継承して`ignore_aliases`メソッドをオーバーライドする手法や、lambda関数を用いる方法について解説しています。これにより、重複データをそのまま出力し、参照の抽象化を避けることができます。
Python whl Metadataを取得する
この記事では、PythonのWheelファイルからメタデータを取得する方法として、`importlib_metadata`パッケージの使用方法を紹介します。`importlib_metadata`のインストール手順と、特定のパッケージの`requires`依存関係を取得する具体的な方法を解説しています。さらに、実際のコード例を通じて、`ipython`などのパッケージの依存関係を取得する方法を示しています。
PythonでULIDを使う
この記事では、Pythonで一意なIDを生成するためのULIDの使用方法を紹介します。ULIDの特徴を解説し、`python-ulid`パッケージのインストール方法と基本的な使用例を具体的に示しています。さらに、文字列や時間からULIDを生成する方法についても詳述しています。
[Python]compileallのメモ
この記事では、Pythonの`compileall`モジュールの概要と使用方法を解説します。`compileall`を利用して指定ディレクトリ内のPythonソースファイルをコンパイルし、`__pycache__`ディレクトリにバイトコードファイルを生成する具体的な手順を紹介しています。さらに、`pex`や`maelstrom`といったツールでの実際の利用例を通じて、`compileall`の有用性と応用方法についても詳述しています。
Python strでMarkdownを記述する
この記事では、Pythonの文字列内でMarkdownを記述する際のインデントずれ問題を解決する方法を紹介します。`cleandoc`などを使用してインデントを調整し、可読性を保ちながら正しく表示されるMarkdownを生成する具体的な手順を解説しています。実際のコード例を通じて、効率的なMarkdown記述方法を示しています。
pytest 8系からsetup/teardownの書き方が変わった
この記事では、pytest 8系でnoseのサポートが終了し、それに伴い`setup`/`teardown`の書き方が変更された点を解説します。従来の`setup`と`teardown`メソッドを`setup_method`と`teardown_method`に書き換える具体的な方法を紹介しています。これにより、noseを利用していたプロジェクトがpytest 8に対応するための対策方法についても詳述しています。
pytest mockで実行ごとに値を変更する
この記事では、pytestのmock機能を使用してテスト実行ごとに異なる値を返す方法を紹介します。`side_effect`プロパティを利用することで、モックされた関数が連続して異なる戻り値を返すように設定する具体的な手順を解説しています。実際のコード例を通じて、テストの柔軟性と精度を向上させる方法を示しています。
Pydanticを使ってシーケンスを名前でアクセスする
この記事では、Pydanticを用いてシーケンスの要素に名前でアクセスする方法を紹介します。インデックスによるアクセスの曖昧さを解消するために、`AliasPath`を利用してフィールドに名前を割り当てる具体的な手順を解説しています。実際のコード例を通じて、読みやすく明確なモデルの構築方法を示しています。
py-spyを使ってPythonのプロファイリングをする
この記事では、Pythonのプロファイリングツールであるpy-spyの使い方を紹介します。インストール方法から基本的な使用方法、プロファイリング結果の可視化方法まで具体的に解説しています。実際のプロファイリング例を通じて、コードのパフォーマンス改善に役立てる方法を示しています。
Pull Request Templateを作ってレビューのラリーを減らす
この記事では、Pull Request Templateを作成してコードレビューのラリーを減らす方法を紹介します。コンテキストの共有を促進し、レビュアーの負担を軽減する具体的なテンプレート作成手順を解説しています。また、新メンバーのガイドライン共有や検索性向上についても述べています。
Pull Requestを分析してレビュー効率とチームパフォーマンスを可視化する
この記事では、GitHub Actionsのpull-request-analytics-actionを使用して、Pull Requestのレビュー効率とチームパフォーマンスを可視化する方法を紹介します。このアクションはプルリクエスト、コードレビュー、コメントのデータに基づいてレポートを生成し、チームの強みや改善点を特定します。また、具体的な設定方法やレポートのカスタマイズについても詳しく解説しています。
Pub/Sub Emulator を使ってみた
この記事では、Pub/Sub Emulatorを使用してローカル環境でPub/Subサービスをエミュレートする方法を紹介します。Google Cloud CLIを活用したインストール手順から起動方法まで、具体的なステップを詳しく解説しています。また、ローカル開発環境での利便性や注意点についても述べています。
Pub/Sub Dead Letter Topic
この記事では、Pub/Subの再試行ポリシーによりリトライ回数を超過したメッセージがDead Letter Topicに移動される仕組みを解説します。Dead Letter Queueに移動されたメッセージが元のメッセージと同じbodyおよび属性を保持していることを検証する方法を具体的に紹介します。設定手順や検証手順を通じて、Dead Letter Queueの動作を詳細に説明しています。
PrivateなCloud SQLにBigQueryを接続する
この記事では、BigQueryをプライベートなCloud SQLに接続する具体的な手順を解説します。Cloud SQLのNETWORKING設定でプライベートパスを有効にし、BigQueryの外部接続設定で接続名やデータベース情報を入力する方法を紹介します。また、異なるプロジェクト間での接続が制限されている点についても説明しています。
pexでマルチステージビルドを行う
この記事では、pexを使用してマルチステージビルドを行う方法を解説します。ソースコードとサードパーティパッケージを分離することで、キャッシュ効率を向上させ、ビルド時間の短縮を実現します。具体的なディレクトリ構成とPantsを用いたpexの構築手順も詳しく紹介します。
Pex内部のGunicornを使ってWebAPIを起動する
この記事では、Pantsを使用してPex環境内でGunicornを用いてWebAPIを起動する方法を解説します。PexファイルのエントリーポイントをGunicornに設定し、FastAPIアプリケーションを起動する具体的な手順を紹介します。依存関係管理やディレクトリ構成の確認方法など、実装時の注意点についても詳述します。
Pants testでdebugする
この記事では、Pantsでテストを実行する際にpdbを使用してデバッグする方法を紹介します。テストコード内に`pdb.set_trace()`を挿入することで、pytestと同様にデバッグセッションを開始できます。また、具体的な例と`pants test --debug`コマンドの使用方法についても詳しく解説します。
Pantsのテストでカバレッジを取得する
この記事では、Pantsを使用してテストのカバレッジを取得する方法を紹介します。`--use-coverage`オプションや設定ファイルでカバレッジを有効化する手順を具体的に解説します。また、フィルタ機能を活用して対象ファイルを限定し、GitHub ActionsなどのCI環境での実装方法についても詳述します。
PantsでTerraformを使う際のsetupとtips
この記事では、PantsでTerraformを使用する際のセットアップ方法と便利なヒントを紹介します。リモートモジュール利用時のgit設定や、Pantsがgitバイナリを認識しない場合の対処法を具体的に解説します。さらに、外部データソースでgitを使用する際の注意点についても詳述。
Pantsでリモートキャッシュを使う
この記事では、Pantsのリモートキャッシュ機能を活用する方法を解説します。bazel-remoteコンテナイメージを使用してS3とGCSにキャッシュを保存する具体的な設定手順を紹介します。さらに、GitHub ActionsなどのCI環境での実装例を通じて、ビルドパフォーマンスの向上方法を詳述
PantsでOpenCVを使う
この記事では、Pantsを使用してOpenCV(cv2)を取得し、ターゲットとして管理する方法を解説します。`opencv-python`と`opencv-python-headless`の競合問題を解決する具体的な手順を紹介し、`.BUILD`ファイルでの依存関係の適切な設定方法を説明します。また、依存関係の競合を防ぐためのベストプラクティスについても詳述
[Pants] 特定のlintのみの実行とスキップ
この記事では、Pantsを使用して特定のlintのみを実行したり、スキップする方法を紹介します。`--xxx-skip`オプションを利用して不要なlintを除外する手順や、`--lint-only`オプションで特定のlintだけを実行する方法を具体的に解説します。これにより、効率的にコード品質を管理できるようになります。
PantsでHTTPリソースを取得する
この記事では、Pantsを用いてHTTPリソースを取得し、ターゲットとして管理する方法を解説します。`http_source`ターゲットの設定手順や、`len`および`sha256`の取得方法を具体的に説明します。
tagを使ってPantsのターゲットをフィルタする
この記事では、Pantsでタグを使用してターゲットをフィルタリングする方法を紹介。`skip-ci`タグを利用して特定のターゲットをCIから除外する手順を具体的に解説。さらに、複数のタグを組み合わせたand条件でフィルタする方法についても解説。
Pants TestのCoverage対象のファイルをFilterする
この記事では、Pants Testのカバレッジ対象ファイルをフィルタリングする方法を紹介します。`--coverage-py-filter`オプションを使用して、推移的な依存ファイルを除外し、変更のあったソースファイルのみをカバレッジ対象とする手順を具体的に解説します。また、GitHub Actionsとの連携による環境変数の設定方法についても詳述。
Pants Concurrency
Pants の並列実行のtips
Pants Bootstrapで環境変数を設定する
この記事では、Pants Bootstrapを利用してPantsコマンド実行前に環境変数を設定する方法を紹介します。`.pants.bootstrap`スクリプトに必要な環境変数やコマンドを記述することで、Pantsの実行を自動化・効率化できます。具体例として、`GIT_COMMIT`の設定とエクスポート手順を詳しく解説します。
packerを使ってVMイメージを作成
この記事では、HashiCorp Packerを使用して効率的にVMイメージを作成する方法を解説します。PackerのインストールからGCEでのDeep Learning VM作成、Terraformとの連携手順を具体的に説明し、GPUドライバやコンテナのセットアップ方法も紹介しています。さらに、Packerで作成したイメージを利用することで、VM起動からコンテナ実行までの時間を大幅に短縮できることを示します。
【kubernetes】Numaflowでストリーミング処理を行う
この記事では、Kubernetesネイティブなストリーミング処理フレームワークであるNumaflowについて紹介します。YAMLで定義されたパイプラインを使用して、ソース、データ処理、シンクのVertexを連結し、大規模な並列ストリーム処理を実現します。リアルタイムデータ分析やイベント駆動型アプリケーションなど、さまざまな利用シーンで活用できます。
MkDocsでOpenAPIドキュメントを表示する
この記事では、MkDocsでOpenAPIドキュメントを表示するための4つのプラグインを紹介します。それぞれのプラグインが提供する表示形式(Swagger UI、Table、ReDoc)と設定項目の違いについて解説しています。具体的なプラグインの使い分け方も紹介します。
MIGのVMを一時停止/停止する
本記事では、Google CloudのManaged Instance Group (MIG)でVMを一時停止および停止する機能について解説しています。この機能を活用することで、コスト削減やスケールアウト時のパフォーマンス向上が可能になります。また、具体的なユースケースや設定方法についても詳しく紹介しています。
kfp localの実行時にGPUを使う
この記事では、kfp(Kubeflow Pipeline)をローカル環境でGPUを使用して実行する方法を解説しています。Dockerのランタイムをnvidiaに変更し、`/etc/docker/daemon.json`を適切に設定する手順を紹介。最後に、Dockerを再起動することでkfp local実行時にGPUが利用可能になることを確認します。
GitHub Releases からバイナリをインストールする手軽な方法
この記事では、GitHub Releasesからバイナリを手軽にインストールする方法を紹介します。手動でのダウンロードや展開の手間を省くために、`installer`、`gh-install`、`dra`、`install-release`といったツールを試しています。各ツールの特徴と使用方法について具体的に解説します。
【GitHub Actions】git diff の差分を高速に取得する方法
この記事では、GitHub Actionsでgit diffの差分を高速に取得する方法を紹介します。actions/checkoutを2回実行することで、全履歴を取得せずに差分を効率的に取得できます。リポジトリが大きい場合のCI/CDのパフォーマンス向上に役立ちます。
[git lfs]filterを使ってオブジェクトを絞り込む
この記事では、Git LFSのfilter機能を使用して特定のオブジェクトのみを管理対象とする方法を紹介します。`--include`や`--exclude`オプションを利用して、特定のディレクトリやファイルを対象に絞り込む手順を具体的に説明します。さらに、filter設定をconfigに追加してデフォルトの挙動を変更する方法についても解説します。
便利なGitコマンド
新規ファイルをトラック、差分を個別にトラック、変更があったファイルだけをトラック、 問題箇所を特定するには、git コマンドの紹介。
[GitHub Actions] DraftのPull RequestでCIをスキップする
この記事では、GitHub ActionsでDraftのPull Requestに対してCIをスキップする方法を紹介。`pull_request`イベントのトリガー設定と、ジョブの実行条件として`github.event.pull_request.draft == false`を設定する手順を紹介。
GitHub Actionsのキャッシュを削除する
gh cliを使ってGitHub Actions のキャッシュを削除する方法について紹介
複数のインスタンステンプレートをMIGとして利用する
この記事では、Google CloudのManaged Instance Group(MIG)で最大2つのインスタンステンプレートを利用する方法を紹介します。複数のテンプレートを使用することで、コスト削減やGPUクオータの制約回避など、異なる設定の仮想マシンを同時に起動できます。Terraformを用いたMIGの設定手順も具体的に紹介します。
CV-CUDAのpillow resizeを試す
この記事は、NVIDIAが提供するCV-CUDAを使って画像のリサイズを行い、pillow、resizer、cvcudaの3つの方法で処理時間を比較した内容を紹介しています。CV-CUDAは機械学習向けの画像処理およびコンピュータビジョンアプリケーション向けのオープンソースプロジェクトで、GPUアクセラレーションを活用して効率的な前処理・後処理パイプラインを構築できます。これにより、スループットを向上させながらクラウドコンピューティングコストを削減できます。
CSpellでスペルチェック
この記事は、CSpellというスペルチェックツールの使い方について説明しています。CSpellはCLIとVSCodeで使用できます。
コードリーディングの効率を上げるためのTips
この記事は、VSCodeを使ってコードリーディングの効率を上げるためのTipsを紹介しています。
Cloud Buildを非同期で実行する
この記事では、Google CloudのCI/CDサービスであるCloud Buildを非同期で実行する方法について紹介しています。`gcloud builds submit`コマンドに`--async`オプションを指定することで、Cloud Buildを非同期で実行できます。これにより、GitHub ActionsやCloud Functionsなどの従量課金性のサービスからCloud Buildを実行する際に、実行が終わるまで待機する必要がなくなり、二重課金を避けることができます。
Argo Workflowsのsuspend機能を活用した非同期実行
この記事では、Argo Workflowsのsuspend機能を活用して非同期実行を行う方法について紹介します。suspend機能を使うと、外部ジョブの実行をトリガーした後、ワークフローを一時停止し、外部ジョブの完了時にArgo APIを呼び出してワークフローを再開できます。
ActivityWatchで活動を記録する
ActivityWatchというツールを使ってPCでの活動を記録する方法を紹介します。ActivityWatchを使うと、作業時間の記録を行い、どこに時間を使っているかを把握するのに便利です。活動のサマリーやタイムラインとしてのふりかえりも可能です。公式サイトからダウンロードし、展開して実行ファイルを実行するだけで使用できます。
gh cliを使った ghcr の認証
ghcr.ioにDockerイメージをpushするためのにgh cliを使った認証方法を紹介。
PyTorchの推論を高速化する
PyTorchの推論を高速化する方法について調べてみた。混合精度の使用や、Channels-Lastメモリ形式、cuDNN ベンチマーク、torch.inference_mode()、torch.compile()等を利用することで高速化が期待できる。torchのモデルをTensorRTやONNX、OpenVINO、Deepspeedに変換することで高速化する方法もある。
Triton Model Navigator で PyTorch, TensorFlow, ONNX モデルを最適化
Triton Model Navigator は、NVIDIA GPU を活用したディープラーニングモデルの最適化とデプロイメントのための強力なツールキットです。PyTorch、TensorFlow、ONNX モデルを TensorRT に変換するプロセスを自動化し、パフォーマンス向上、精度検証、プロファイリング、デプロイメントの簡素化を実現します。自動化された最適化、フレームワーク間の互換性、QAT サポートなど、豊富な機能を備えています。
Pantsでwhlを作る
Pantsでwhlを作る
FastAPIのパフォーマンス分析
fastapi_profilerはFastAPIのミドルウェアとして動作し、リクエストごとの処理時間、各Pythonコードの処理時間を計測できます。インストールはpipで行い、PyInstrumentProfilerMiddlewareをFastAPIに追加するだけで使用可能です。
Home
Nishikohの技術ブログです。 PythonやGoogle Cloud(GCP)、MLOpsについての備忘録が多めです。
これまで読んだ本
読んだ本の一覧
pants/pants testで実行中かを判定する
Google Cloud API Gatewayのスキーマ定義をFastAPIで作成する
gcloud aio storageのtoken発行がtimeoutになる
GitHub の認証が面倒だったので gh cli で楽をしたい
多要素認証をしていたらprivateリポジトリのcloneに手間がかかる。gh cliを使って認証をした後にcloneすると楽に開発を進められる。
google-indexing-script を使って Google 検索のインデックス登録を自動化する
依存ライブラリがメンテナンスされているか調べる
Pydanticのエイリアスについて
Pydanticのエイリアスを使うことでデータソースのフィールド名とコードスタイルを紐づけることができる。allow_population_by_field_name=Trueを設定することで、エイリアス前の名前とエイリアス名の両方を使ってデータ化することができる。エイリアスの指定方法には優先順位があり、複数の方法で設定することができる。
Slide
公開しているスライドのリンク
Pull Request の番号を取得する
外部媒体のtech blog
外部媒体のtech blog
GitHub Actions 内でコンテナを動かす
GitHub Actions 内でコンテナを動かす
GitHub Actionsでsecretsを使う
GitHub Actionsでsecretsを使う方法について調べてみた。env構文で使うことで、環境変数として使うことができる。
[mypy]TypeError: 'type' object is not subscriptable を解決する
mypyでTypeError: 'type' object is not subscriptable を解決する
Pantsを使ったモノレポで依存関係を調べる
Pantsを使ったモノレポで依存関係を調べる。ファイルとしての依存を特定したり、レポジトリ全体で使われてるPythonライブラリの情報を取得できる。
poetryの依存関係を一括で更新する
poetryで依存関係を更新する際は、更新するパッケージを明示的に指定する必要がある。poetryプラグインのpoetry upを使うことで依存関係を一括で更新できる
GitHub Actionsでpytestのカバレッジを出力する
GitHub Actionsでpytestのカバレッジを出力する。計測したカバレッジをPull Requestに出力したり、jobのサマリーに出力できる。
terratagを触ってみた
terratagを触ってみた。terratagはリソースにtagを付与するツール。AWSにはdefault_tagsがあるが、Google Cloudにはないのでterratagを使うと便利。
Vertex AI Pipelinesを触ってみた
Vertex AI Pipelinesとは、Vertex AIの機能の一つで、MLモデルの学習やデプロイを自動化するためのツールです。Vertex AI Pipelinesは、Kubeflow Pipelinesの上に構築されており、Kubeflow Pipelinesの機能をそのまま利用することができます。Vertex AI Pipelinesを使って、MLモデルの学習とデプロイを試してみました
cargo generateを触ってみた
Rustのプロジェクトを作成するためのテンプレートを作成するcargo generateを使ってみた。プロジェクトテンプレートとしてcookiecutterやcopierがあるがそれのRust版という感じ。
BuildJetでGitHub Actionsの費用を半分にする
BuildJetをでGitHub Actionsのruns-onで指定すると同等のマシンスペックの費用が半分になる
GitHub Actions で inputs の値を使うと concurrency の group 設定がうまくできなかった
GitHub Actions で inputs の値を使うと concurrency の group 設定がうまくできなかったがgithub.eventのinputsを使うとうまく設定できた。
GitHub Actionsのあれこれ
この記事ではGitHub Actionsのあれこれをまとめていく。実行ブランチの取得やrun-nameを使った概要表示、workflow完了後に発火させる設定、外部リソースの使用など。
MkDocsを使ってGitHub Pagesに公開する
mkdocs-materialを使ってGitHub Pagesを公開するための手順を解説。GitHub Actionsを使用してアーティファクトを出力してデプロイを行う。紹介する手法ではGitHub Pages公開用のブランチを作成せずに公開できる。日本語の検索がうまくできずハマったのでその対処法も紹介する。
[GitHub Actions] paths-filterを使ってファイル、ディレクトリの変更を検知する
GitHub Actionsのpaths-filterを使用して、変更されたパスやファイルを検知し、処理をトリガーする方法について紹介。matrixを活用してパスごとに並列処理ができたり、外部ファイルに設定を記述することでメンテナンスがしやすくなる。
モノレポビルドシステムBuck2
Buck2というMetaが発表したモノレポビルドシステムについて調べてみた。C++, Rust, Pythonなど多言語のビルドをサポートしている。PythonはPantsと同じくpexを生成する
Dockerのビルド結果をキャッシュする
Dockerのビルドキャッシュの設定には、buildxを使用することで細かなオプションが利用できます。ビルドキャッシュは複数の方法で保存・利用することができます。outputs: type=dockerを指定すると遅くなるので不必要な使用は避けた方が良いです。
Pantsでadhoc toolを使ってみた
TorchServeの中で外部ライブラリを使う
TorchServeの中で外部ライブラリを使う。requirements.txtを使うことでTorchServeの中で外部ライブラリを使うことができる。
changelogを自動で生成したい
changelogを自動で生成するためのツールを調べてみた。ローカルのgit log/tagから生成するものと、GitHubのAPIを使って生成するものがある。
Cloud Runデプロイコマンドでシークレットを扱う
Cloud Runデプロイコマンドでシークレットを設定。ワンライナーで複数のシークレットを設定する方法を紹介する。
cookiecutterとcruftとcopierでプロジェクトテンプレートの更新を取り入れる
プロジェクトを始める時にお決まりのディレクトリ構成、ライブラリ、ツール、CI 設定、その他を使いまわすためにプロジェクトテンプレートを用意することがある。テンプレートが更新された際、既に作成済みのプロジェクトにコピペで更新を反映したり、更新が面倒で放置されるプロジェクトもある。そこで継続的にテンプレートの更新をプロジェクトに反映するツールcruftとcopierについて調べてみた。
GitHub の Release から asset を取得する
GitHub Release から asset をダウンロードする方法
MkDocsのblogging extensionのpagingがうまくいかなかった
MkDocsのblogging extensionのpagingが動作せず、全てのコンテンツが2回表示されてしまった。pagingを無効ににして一ページで表示する件数を多くすることで、全てのコンテンツを一ページに一回表示することにした。
Pub/Subを触ってみた
Pub/Subを触ってみた。Pub/Subの概要、Subscriptionのタイプ、メッセージの再送、配信保証についてまとめた。別プロジェクトのPub/Subトピックを関連づける方法やPub/Subの指標を使ったCompute Engineのスケールについて紹介
Pydanticでコマンドライン引数をパースする
Pydanticでコマンドライン引数をパースすることで、コマンドライン引数のバリデーションを行うことができる。
MQL で Vertex AI Endpoint の endpoint_id ごとにエラー率を取得する
MQL で Vertex AI Endpoint の endpoint_id ごとにエラー率を取得する
FastAPIでOpenAPI定義を生成する
FastAPIとPydanticを使ってOpenAPI定義を生成できる。ReDocのなかにOpenAPIのUIを埋め込むというのもやってみた。
actを使ってみた
actはGitHub Actionsの動作検証を手元で行うためのツールです。Dockerを使用して動作検証を行い、事前にDocker環境を用意する必要があります。actは3つの異なるサイズのベースDockerイメージ(Micro、Medium、Large)から選択することができます。一部の動作はactで検証できない場合があります。
Apache BeamでPyTorchを動かしてみた
Dataflow MLで紹介されてるPytorchのサンプルコードを動かしてみた。Torchのモデルで推論することができた。
Cargoプロジェクトのバージョンを取得する
cargo metadataコマンドとjqを使って、Cargoプロジェクトのバージョンを取得する
Cloud BuildでGitHubのSSH鍵を使う
Cloud BuildでGitHubのSSH鍵を使う方法を調べてみた。Cargoやgit submoduleなどでプライベートのリポジトリにアクセスする際にSSH鍵が必要になる。
docker-slimを触ってみた
docker-slimはDockerコンテナイメージのサイズを小さくするツール。最大1/30のサイズになる。PythonのWebAPIで試してみたがうまくできなかった。
エンジニアリングマネージャーのしごとを読んだ
エンジニアリングマネージャーのしごとを読んだ。この本はエンジニアリングマネージャーの役割、必要なツールやプロセス、スタッフとの関係性構築、モチベーションの理解、評価や採用について書かれている。
eventarcを触ってみた
eventarcとはeventが起こったことを検知してPub/SubやAPIエンドポイントに通知するGoogle Cloudのサービス。eventarcを作るとPub/Subのtopicとsubscriptionも一緒に作ってくれる。
MkDocsで特定のファイルやディレクトリを除外する
MkDocsのビルドプロセスを高速化するために、 mkdocs-excludeを使って必要のないファイルを除外する。mkdocs.ymlファイルに設定を追加することで、除外するファイルを指定できる。
gh cliでtokenを出力する
ローカル開発をする際にGitHubの機能を使った動作確認をすることがある。動作確認にGitHub のtokenが必要なことがあるが、都度tokenを生成するのは手間がかかる。gh cliを使って認証で使っているtokenを出力し、それを使うことで手間を省くことができる。
GitHub CLI拡張でPull Requestのメトリクスを収集する
GitHub CLI拡張でPull Requestのメトリクスを収集する。これを使うことでコードレビューにどれだけ時間がかかっているか知ることができる。
GitHub Actionsでoutputへの出力をPythonで行う
GitHub Actionsでoutputへの出力をPythonでやってみた
ディレクトリのgit logを表示する
特定のディレクトリのgit logを表示する
git管理のrootディレクトリを取得する
git rev-parse --show-toplevel コマンドを使うとGit の最上位ディレクトリを表示できる。
GitHubでCIのステータスを取得・変更する
GitHubでCIのステータスを取得・変更する
Google Professional Services というレポジトリで気になったものを列挙する
Google Professional Services というレポジトリで気になったものを列挙する。このレポジトリにはGoogleCloudプロジェクト内のリソースの可視化やDataflowのサンプルコード、IAM管理のツール等がある。
image streaming について調べてみた
image streaming について調べてみた。image streamingを使うことで、コンテナイメージ pullの時間を大幅に短縮できる。
MkDocsでHTMLを表示する
MkDocsを使用して、HTMLページに遷移するためには、navの参照をHTMLファイルに設定する必要がある。ローカルのHTMLやリモートのwebページに遷移することができる。
MkDocsのインデントを調整する
MkDocsのリスト等をネストさせる時のインデントがデフォルトではスペース4個になっている。スペース2個のMarkdownで書きたいので、これを反映する方法について調べてみた
MkDocs Pluginのtimelineを使う
MkDocs Pluginのtimelineを使ってみた。導入する際にREADMEに書いてあることだけではうまくいかなかったのでメモ。
MKDocsでタイムライン機能を有効にする
MKDocsでタイムライン機能を有効にする。対象ディレクトリをカレントディレクトリに設定することで、全体を対象にできる。 markdownのヘッダーで exclude_from_blog: true を設定することで、非表示にできる
Pantsでディレクトリ配下の設定を統一する
Pantsでディレクトリ配下の設定を統一する。ディレクトリ配下の設定を統一することで、設定の変更が楽になる。
Pantsで個人用の設定を使う
Pantsで個人用の設定を使う。個人用の設定を使うことで、個人用の設定を変更しても他の人に影響を与えない。
Pantsのテストをshard分割して実行する
Pantsのテストをshard分割して実行できる。リポジトリ全体のテストを分割して実行することで、CIの実行時間を短縮できる。
Pantsで差分テストをやってみた
Pantsはビルドシステムであり、モノレポを管理するために使用される。テスト実行時にオプションを付与することで差分テストを実行できる。差分テストをすることで、テスト時間を短縮できる。
ローカルの whl を使ってpip installする
ローカルの whl を使ってpip installする。ローカルの whl を使うことで、インターネットを経由せず pip install できる。
pipxでflake8 プラグインを使う
pipxでflake8 プラグインを使う
PydanticでGenericを扱う
PydanticでGenericを扱う。Genericを使うことで型を指定しながら柔軟にモデルを定義できる。
subprocessで標準出力の結果を文字列として取得する
subprocessで標準出力の結果を文字列として取得する方法について
Pytorchで量子化してみた
Pytorchで量子化してみた。CUDAを使った量子推論はできなかったが、ONNXやTensorRTに変換すればできるかもしれない。
vscode-revealでtwo columnにする
vscode-revealでtwo columnにする
Ruffを使ってみた
Ruffを使ってみた
Googleのソフトウェアエンジニアリングを読んだ
Googleのソフトウェアエンジニアリングを読んだ。Googleのエンジニアリング組織の構造や開発プロセス、コードレビュー、スタイルガイド、コードレビュー、CI/CD、デプロイ、モニタリング、リリース、サービスの運用などについて書かれている。
Source Repositoryを触ってみた
Cloud Source Repositoriesは、Google CloudでホストされているプライベートGitリポジトリです。Source Repository Readerの権限をServiceAccountに付与すると、クローンすることができます。
Cloud Runをterraform applyした時のハングを解消する
Cloud Runのリソースに対してterraform apply を実行する際にエラーが発生し、ハングしました。autogenerate_revision_name=true を設定することで、エラーを回避できました。また、template.metadata.name にユニークな名前を設定することでも問題を解決できます。
既存のインフラストラクチャをIaCで管理するツールTerraformerとその関連ツール
IaCで管理してないリソースを取り込んでIaCとして管理するツールTerraformerとその関連ツールの紹介
Vertex AI EndpointsのIDを任意のIDにする
Vertex AI EndpointsのIDを任意のIDにする。数字のみ使用でき、先頭の文字を0以外にする必要がある。
Vertex AI EndpointsのIDとDisplay Nameを取得する
Vertex AI EndpointsのIDとDisplay Nameを取得する
Vertex AI Prediction Batchを触ってみた
Vertex AI Prediction Batchを触ってみた。入力値にGCSオブジェクトのパスを指定するとbase64エンコードされて処理される。出力先はBigQueryとGCS。リアルタイム推論が必要ない場面ではシステム構成の選択肢になる。
Vision APIを使う時のロールについて
Vision APIを使う時のロールについて