Timeline¶
依存ライブラリがメンテナンスされているか調べる
kfp localの実行時にGPUを使う
Pydanticのエイリアスについて
Pydanticのエイリアスを使うことでデータソースのフィールド名とコードスタイルを紐づけることができる。allow_population_by_field_name=Trueを設定することで、エイリアス前の名前とエイリアス名の両方を使ってデータ化することができる。エイリアスの指定方法には優先順位があり、複数の方法で設定することができる。
pytest 8系からsetup/teardownの書き方が変わった
PythonでULIDを使う
Terraform localsでkey, value値を定義する
FastAPIのプロファイリング
GitHub Releasesからバイナリをインストールする
Slide
公開しているスライドのリンク
PantsでOpenCVを使う
MkDocsでOpenAPIドキュメントを表示する
コードリーディングの効率を上げるためのTips
CSpellでスペルチェック
typosを使ってtypoを見つける
Google Cloud API Gatewayのスキーマ定義をFastAPIで作成する
Python strでMarkdownを記述する
Pants testでdebugする
【kubernetes】Numaflowでストリーミング処理を行う
Pydanticを使ってシーケンスを名前でアクセスする
【GitHub Actions】git diff の差分を高速に取得する方法
GitHub の認証が面倒だったので gh cli で楽をしたい
多要素認証をしていたらprivateリポジトリのcloneに手間がかかる。gh cliを使って認証をした後にcloneすると楽に開発を進められる。
ActivityWatchで活動を記録する
Pull Request の番号を取得する
これまで読んだ本
読んだ本の一覧
外部媒体のtech blog
外部媒体のtech blog
uvを使ったtorchの依存管理
tagを使ってPantsのターゲットをフィルタする
Argo Workflowsのsuspend機能を使った非同期実行
google-indexing-script を使って Google 検索のインデックス登録を自動化する
Pull Requestを分析してレビュー効率とチームパフォーマンスを可視化する
MIGのVMを一時停止/停止する
Pants Bootstrapで環境変数を設定する
Cloud Buildを非同期で実行する
Cloud Buildを非同期で実行する
GitHub Actionsのキャッシュを削除する
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 を解決する
packerを使ってVMイメージを作成する
Pants TestのCoverage対象のファイルをFilterする
Pantsを使ったモノレポで依存関係を調べる
Pantsを使ったモノレポで依存関係を調べる。ファイルとしての依存を特定したり、レポジトリ全体で使われてるPythonライブラリの情報を取得できる。
Pantsでリモートキャッシュを使う
Pantsでリモートキャッシュを使う
Pantsのテストでカバレッジを取得する
Pex内部のGunicornを使ってWebAPIを起動する
pexでマルチステージビルドを行う
poetryの依存関係を一括で更新する
poetryで依存関係を更新する際は、更新するパッケージを明示的に指定する必要がある。poetryプラグインのpoetry upを使うことで依存関係を一括で更新できる
GitHub Actionsでpytestのカバレッジを出力する
GitHub Actionsでpytestのカバレッジを出力する。計測したカバレッジをPull Requestに出力したり、jobのサマリーに出力できる。
slackで質問テンプレートを作って解決までの時間を短縮する
Terraform Dynamic Blockで動的にリソースを設定する
Terraform Dynamic Blockを使うとリソースの設定を動的に行うことができる
Terraform で Git コミットの SHA を取得する
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を活用してパスごとに並列処理ができたり、外部ファイルに設定を記述することでメンテナンスがしやすくなる。
PantsでHTTPリソースを取得する
Home
Nishikohの技術ブログです。 PythonやGoogle Cloud(GCP)、MLOpsについての備忘録が多めです。
Pull Request Templateを作ってレビューのラリーを減らす
yqを使ってyamlの配列の値でforループを回す
モノレポビルドシステムBuck2
Buck2というMetaが発表したモノレポビルドシステムについて調べてみた。C++, Rust, Pythonなど多言語のビルドをサポートしている。PythonはPantsと同じくpexを生成する
Dockerのビルド結果をキャッシュする
Dockerのビルドキャッシュの設定には、buildxを使用することで細かなオプションが利用できます。ビルドキャッシュは複数の方法で保存・利用することができます。outputs: type=dockerを指定すると遅くなるので不必要な使用は避けた方が良いです。
Pantsでadhoc toolを使ってみた
ScaleneでPythonのプロファイリングを行う
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 Emulator を使ってみた
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 ごとにエラー率を取得する
py-spyを使ってPythonのプロファイリングをする
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コマンド
新規ファイルをトラック、差分を個別にトラック、変更があったファイルだけをトラック、 問題箇所を特定するには、git コマンドの紹介。
ディレクトリの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でwhlを作る
Pantsでwhlを作る
Pantsで個人用の設定を使う
Pantsで個人用の設定を使う。個人用の設定を使うことで、個人用の設定を変更しても他の人に影響を与えない。
Pantsのテストをshard分割して実行する
Pantsのテストをshard分割して実行できる。リポジトリ全体のテストを分割して実行することで、CIの実行時間を短縮できる。
Pantsで差分テストをやってみた
Pantsはビルドシステムであり、モノレポを管理するために使用される。テスト実行時にオプションを付与することで差分テストを実行できる。差分テストをすることで、テスト時間を短縮できる。
ローカルの whl を使ってpip installする
ローカルの whl を使ってpip installする。ローカルの whl を使うことで、インターネットを経由せず pip install できる。
pipxでflake8 プラグインを使う
pipxでflake8 プラグインを使う
PrivateなCloud SQLにBigQueryを接続する
PrivateなCloud SQLにBigQueryを接続する
PydanticでGenericを扱う
PydanticでGenericを扱う。Genericを使うことで型を指定しながら柔軟にモデルを定義できる。
pytest mockで実行ごとに値を変更する
subprocessで標準出力の結果を文字列として取得する
subprocessで標準出力の結果を文字列として取得する方法について
Python whl Metadataを取得する
PyTorchの推論を高速化する
PyTorchの推論を高速化する方法について調べてみた。混合精度の使用や、Channels-Lastメモリ形式、cuDNN ベンチマーク、torch.inference_mode()、torch.compile()等を利用することで高速化が期待できる。torchのモデルをTensorRTやONNX、OpenVINO、Deepspeedに変換することで高速化する方法もある。
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 にユニークな名前を設定することでも問題を解決できます。
Terraformで特定のリソースごとにコマンドを実行する
Terraformは、インフラストラクチャのコード化(IaC)に使用されるツールです。モジュールの特定のリソースに対して、terraform state show、terraform plan、terraform apply、terraform destroyコマンドを使用できます。
既存のインフラストラクチャをIaCで管理するツールTerraformerとその関連ツール
IaCで管理してないリソースを取り込んでIaCとして管理するツールTerraformerとその関連ツールの紹介
textlintを使ってみた
textlintを使ってみた。textlintは日本語の文章の文法的におかしなところを指摘してくれるツール。プラグインのprhを使えば表記ゆれの統一もできる。
tfupdateを使ってterraformのバージョンを一括で更新する
tfupdateを使ってterraformのバージョンを一括で更新する。tfupdateはcore, provider, moduleのバージョンを更新するツール。ディレクトリを再帰的に探索し、まとめて更新できる。
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を使う時のロールについて