たれぱんのびぼーろく

わたしの備忘録、生物学とプログラミングが多いかも

プログラミング

Pythonのデフォルト引数とクラスインスタンス - 再利用が引き起こすバグ

Pythonは言語仕様としてデフォルト引数を再利用する。これは mutable オブジェクトとの組み合わせで容易にバグを引き起こす。 言語仕様 関数定義時にデフォルト引数が評価されて確定し(=評価は一度きり)、これが関数呼び出し時に渡される。 The default va…

OmegaConf の入れ子構造化コンフィグ

OmegaConf は構造化コンフィグの入れ子(Nesting structured configs)をサポートしている(docs - Nesting structured configs)。 その際、default_factory の利用が推奨されている。 @dataclass class Group: name: str = MISSING admin: User = field(de…

PyTorch-TensorFlow: 初期化の違い

PyTorchとTensorFlowで再現性の違いが出ることはよくある。 その要因の一つが初期化手法の違い。 なのでドキュメントとコードを当たって初期化手法をチェックした。 PyTorch vs TensorFlow Linear: kaiming_uniform(a=√5) == ~U[±√1/fan_in] vs glorot_unifo…

PyTorchでLSTMCellをONNXにエクスポートする: こいつ、ばらけるぞ

PyTorchでnn.LSTMCellをONNXにエクスポートすると、LSTM operatorになるでもなく、LSTMCell operatorになるでもなく、プリミティブ opsの集まりとして出力される。 gist.github.com まず、ONNXにはRecurrentCellに相当するoperatorがない(参考: wikipedia/O…

僕が考えたさいきょうのPyTorch Linting rules

命名規則: saveされる変数はexposedとして扱う モデル状態は state_dict() で保存され、後日loadされる。 state_dict()はパラメータ(例: nn.Module) とバッファを変数名に基づいて保存し、load時は変数名に基づいて状態がrestoreされる。 なのでモジュール…

パディング/padding in PyTorch

幅のある入力をスライドさせながら処理していくとき、左右端をどうするかという問題がでてくる。 端を何かしらの値で埋める(入力をちょっと大きくしておく)処理をパディングという。 特にPyTorchにおけるパディング実装のまとめ。 F.pad torch.nn.function…

インスタンス状態の保存と復元

引数で初期化され内部状態を持つインスタンスがあったとき、それをいかに保存し、のちに復元するか. 問題整理 class A: def __init__(self, arg1): parts = SubA(arg1) self.var = 1 def add(self): self.var += 5 def save(self): pass def from_snapshot(s…

3rd merge principle; 3rdマージ原則

Write a feature, Copy it for another usage, then Merge them for 3rd common use case. 機能を書き、次の利用時はコピペし、3度目の共通用途になったらマージしろ. 3rd merge principleは早すぎる共通化を戒めるプラクティス. 同じ動作をするコードが2度…

Lockファイル生成と動かせない依存性

Lockファイルは依存性のバージョンを厳密に指定することで動作を保証することを目的とする. 依存性の中にはハードウェアとの兼ね合いで(動作は同じ)ハードウェア固有バージョンを要求する場合がある. この2つは噛み合わせが悪い. Lockで厳密に縛るとハード…

FairSeqのGSLMレポ解析

gslm/speech2unit: Speech-to-連続unit-to-離散unit. モデルと学習済みパラメータが配布. /pretrained: Speech-to-連続unitの部分 /cpc_feature_reader.py: PCP Speech-to-unitモデルの色々 CPCEncoder: [Conv-CN-ReLU]x5だけ. 超シンプル. CPCAR: ただのLST…

sys.float_info.minと配列代入の罠 - numpy float32

sys.float_info.min (とても小さい値) を代入しても何故か0.になる。logが死ぬ。 データ型を疎かにしてたらハマった. 再現コード float_array = numpy.array([1., 2.,], dtype=np.float32) tiny = sys.float_info.min print(float_array) # [1. 2.] float_ar…

Windows user-kernel I/O

Windowsにおいて、ユーザーモードとカーネルモード間でデータ転送を行う手法. Buffered I/O: user-mode Buffer, kernel-mode nonpaged Buffer, then an I/O manager transfers contents between buffers Direct I/O: user-mode Buffer, kernel-mode MDL whic…

Windows AudioGraph

オーディオの入出力・ルーティング・処理を担うWinRT高レベルAPIs1. 入出力のマイク・ファイル指定、合成音の入力化などが可能. UnityやWebにあるノードベースオーディオとだいたい同じ機能を提供. 音響効果の差し込みも可能. Audio graphs - UWP applicatio…

超速!5分でReactアプリ作って世界へ公開

もはやパソコンいらずでReactアプリを作成・公開できる時代. 必要なもの Webブラウザ GitHubアカウント steps レポジトリ生成: 好きな名前のGitHubレポジトリを.gitignore=Nodeで生成 (10秒) 編集モード: ↓Codeボタン -> Open with Codespaces (待ち1分) 素…

Async Generatorの使いどころ

A: 逐次処理と中間結果利用を、関心に基づいて分離できる Async Generator (Async Iterator with Generator) とは async function*で定義できるGeneratorのこと。 例: // Delay utility const asyncProcessing = (output: number): Promise<number> => new Promise((</number>…

MVVMの標語

Domain + declarativeUI + UIstate = M-V-VM 固いことはWikipediaへ転記済み

ReduxToolkit/createSliceの哲学: KISS原則を大事に

Redux ToolkitのcreateSliceはちょっとReduxぽくない処理をしてる。その背景にある哲学は何か。 特徴: ActionとReducerの凝集/密結合 Reduxは「ActionとReducerはN:M対応、互いに疎結合」という哲学1,2. しかしRTK.createSliceはCaseReducerからAction/Actio…

状態管理

何を状態とするか、どこに状態を置くか、誰が状態へ変更するか、いつ状態を読み取るか Viewにも変数、モデルにも変数、コントローラーにも変数、みたいな. 誰でもread/write可、変数を直接触れる、フォーマッターメソッド経由で触ることもある. 状態の分割等…

イベント駆動のパターン

イベント駆動プログラミングの実装において、イベントやイベントループはしばしばプラットフォームから提供される(c.f. ウェブブラウザ). 一方でイベントハンドラの設計は規定されず実装者に一任される。イベント駆動プログラミングにはしばしば頻出するハ…

プログラミングにおける副作用

副作用(プログラミング)== 定められた範囲の外側に対して「値渡し」以外の作用を与えること. 関数の副作用: 関数外に対し、値を渡す以外の何かをすること. 副作用の問題点 副作用を意識して呼び出しをおこなわなければいけなくなる. 「この関数を呼び出し…

JavaScriptのNumber: 2進数表現の不思議

まとめ: Numberは適当に使うと痛い目にあうよ 変な振る舞い 入力した数値が勝手に変更される. console.log(1.01234567890123456789); // 1.0123456789012346 「ああ、有効数字(小数点の桁)の話?」と思いきや、もっと不思議な振る舞いをする. for (let i =…

Amazon ECS仕様早見表

ECSは色々抽象化してくれているが、いざ不具合にであうと内部が見えなくて困る事が多い(抽象化とは). なので詳細仕様の早見表をつくった. Amazon Linux 2 based 対象: Amazon ECS-optimized Amazon Linux 2 AMI Amazon ECS-optimized Amazon Linux 2 (arm6…

Docker storage size

コンテナに割り当てるストレージの大きさ ストレージドライバの種類によって大きく異なる。 overlay2 driver 標準的な環境でのデフォルトドライバ。 /var/lib/docker/overlay2/配下にimageとコンテナ(read-only layerとr/w layer)が置かれてmergedがファイ…

外部スクリプトを実行する、という枠組み

ブラウザ & JavaScript C++ブラウザ / JSエンジン/ JSスクリプト JSは(エンジンが提供する)サンドボックス内で動く。 サンドボックス外へのアクセス用に色々インターフェイスが生やされてるのでそれを使う (e.g. DOM API). ブラウザ & WASM C++ブラウザ / …

Gitとブランチモデルとオープンソースと

オープンソースの特徴: ある意味で自分のコントロールが全く効かない. PR reviewで取りこみの可否や修正は可能. でも、gitの、logは、制御できない、、、 feature branchをmainへ取りこむflowの場合、gitのログがそのままレポジトリにやってくる. gitの粒度…

PyTorchラッパーとCheckpointing

※CoI: PyTorch-Lightning のcontributor (Checkpointing周り) です 比較 wrapper checkpoint local/remote resume/nullable Catalyst ☑ ☑ / □ ☑ / ? Lightning ☑ ☑ / ☑ ☑ / ☑ Ignite ☑ ☑ / △ ☑ / ? △: no direct support, but implementable (handler argume…

AuthZ for container system in AWS

ExecutionRoleArn authZ for docker command authZ for Amazon ECS container agent TaskRoleArn/JobRoleArn AuthZ for containerized app authZ for container outbound AWS API calls https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/Use…

自動リトライ/auto retry

Jobの中断と復帰 Preemptible利用とか 要件 resume read先がnullの時にerrorじゃなくてfrom scratch処理できると実装が楽 auto healing

状態の復元(restore・load)

状態を復元する: restore/load states 状態の読み込み/read states (files) local/remote 対応形式 失敗時の対応 エラー fail properly -> from scratch 状態の適用/ load? restore? apply? states 例 Python PyTorch-Lightning (DeepLearning framework's w…

隔離環境/isolated environment

"isolated environment" Docker provides the ability to package and run an application in a loosely isolated environment called a container. Docker Overview 手法 Container: Docker Python: venv, virtualenv, pipenv, poetry Node.js: nvm, nvm-wi…