たれぱんのびぼーろく

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

プログラミング

S3アクセス抽象化

ファイルシステムアクセスに抽象化。 fsspec -> S3Fs -> botocore

機械学習コードの抽象化/透過処理

Checkpoint 前提: CheckpointのIOは無視できるほど小さい(爆速でCheckpointをread/writeするやつはいない) 学習開始時に pull checkpoint, 学習終了/中断時に push checkpointが必要. 抽象化をしない場合、remote->local checkpointダウウンロード、checkp…

GPU深層学習 in Container

登場人物は5人. GPU Kernel Mode Driver (nvidia.ko) CUDA User Mode Driver ("CUDA driver", libcuda.so) Docker CUDA Toolkit and Runtime ("CUDA Toolkit") cuDNN CUDA driver / CUDA Toolkit / cuDNNに気を使う事が多い。配置場所は以下の通り ref. Host…

Preemptible/Spotインスタンスで数日かかる機械学習Jobを走らせる

安いクラウドサービスを使って楽々機械学習! まとめ 機械学習ジョブを停止有り格安インスタンスで回せるやつを使う。 @2020-11-17 service scheduling auto-scaling auto-retry preemptible e.g. AWS Batch ☑ ☑ ☑ ☑ AWS SageMaker ☑ ☑ ☑ □ GCP AI Platform ☑…

GPUパフォーマンス for 深層学習

Cost/Performance of GPU for Mixed Precision Training GPU GCP price [\$/h] (vs T4) perf [TOPS] (vs T4) NVIDIA A100 0.--- (x-.-) 312.0 (x4.80) NVIDIA V100 0.740 (x6.7) 125.0 (x1.92) NVIDIA T4 0.110 (----) 65.0 (-----) NVIDIA P100 0.430 (x3.9…

Python iterable/iteratorの定義

iterable iterable1は自身のメンバーを1度に1つ返しうるオブジェクトである2。具体例はlist, str, tuple, dict, file obj, iterを実装するclassなどなど。 build-in関数のiter()に渡すとiteratorが返る。 iter()関数相当の操作を様々な言語機能が暗示的にサ…

Python Buildとinstallの架け橋 - wheel -

wheelとは、ビルド済みパッケージのインターフェス/フォーマットである。 Specification PEP 427 -- The Wheel Binary Package Format 1.0 This PEP describes a built-package format for Python called "wheel". 背景 ライブラリの導入にはbuildとinstalla…

データのセットアップ・ロード in Python for 機械学習・ニューラルネットワーク

機械学習・ニューラルネットワークにおいて、データを用意・ロードすることは簡単そうに見えて難しい。 corpusのダウンロード・展開 データの前処理・保存 データセット(processed corpusの部分集合)のセットアップ datumのロード アクセス順・バッチ化 分…

低遅延クラウド接続

AWS Wavelength: 5Gの構内クラウドサービス(っぽい) localzones: AZ内にDCの物理配置が異なるサブzoneが新設。その分類名がlocalzones USだとAZが空間的にめっちゃ広いので都市近郊のlocalzonesにつなぎたくなる。 sub10msecがlocalzonesの意図みたいだけ…

MToon

ライティング調和型のトゥーンシェーダー. トゥーンシェーダ的な効果を付与しつつ、 PBR のシーンライティングと協調することを目的とします。 日本の手描きアニメ表現への特化はしません。 VRM1.0 spec draft VRM1.0で仕様書が作成されるみたい. ライティン…

アジャイルソフトウェア開発

宣言の理解 from Manifesto for Agile Software Development .4. Responding to change over following a plan より重きを置くのは、変化への応答 from Principles behind the Agile Manifesto .1. Our highest priority is to satisfy the customer through…

Gitブランチモデル選定

欲しいもの次第 オープンソース/closedソース 未リリースのコードがoff flagで公開されていたらまずいか deployableじゃないと色々困る v1 release non-releaseable commit merged バグ発見 hotfix branch merge hotfix into master ...cannot release becau…

ソフトウェアテスト

clear goal, achivement check, secure improvements 何を書きたいか明確にし(曖昧なテストは書けない)、その達成度を確認でき、完成後の改善における安心感を与えてくれる red is red, check green, secure refactoring ソフトウェアテスト - Wikipedia …

YAGNIと設計とバランス

目的と良い設計と抽象化/汎化と複雑性 オーバーエンジニアリング 欲しくないもの: 非効率な資源の利用 ある実装をする際 シンプルに1時間で実装 実装のメンテコストは中 実装の拡張コストは大 抽象化しつつ1時間で実装 実装のメンテコストは中 実装の拡張コ…

分離と汎化

entangled -> separated -> generalized ごちゃごちゃのコードはそのまま汎化できない. コードを整理して機能別にまとまりを作って、共通部分を汎化用インターフェースとして切り出す. 抽象化 -> 最上層: 複雑性↓、下層: 複雑性↑ 汎化用インターフェース自体…

楽なプログラミングに求められるもの -見通しの良さ、コード量、etc-

怠惰たれ。 怠惰たるために、楽にプログラムを書きたい。 そのために何が必要か。 背景 -書き方の工夫はできることを増やしはしない- ある言語を使う限り、べたべたの命令型パラダイムで書いたコードとOOPやFPで書いたコードで、実行可能な内容は等しい。 あ…

ドメインモデル -Godモデルは人間にとって早すぎる-

Godモデル: 対象の全ての情報を正確に含んだモデル このモデルさえ上手く扱えれば全ての用途において全員が単一モデルが利用できるため神。 → 残念ながら、良く設計された数千の属性をもつモデルは人の手に余る…扱えない… 「Godモデルの○○属性の処理について…

プログラミングにおける「状態/state」

状態は現実であり武器でありバグの温床. 共にやっていくには知識が必要. 言葉 状態 / state 状態を持つ / stateful 1 状態を持たない / stateless 状態とは何か なにであるか 変化しうる値 参照"される"値 独立した値 何かから導き出されるものではない 1つ…

micro frontends

「分散したコンポーネントが協調してアプリケーションを構成する」 協調 = 複数の独立起動するコンポーネントが相互作用してアプリケーションの機能を達成する. 分散されるときに"共有"されるべきものを定義する(interface) c.f. local state domainが外部…

設定可能な低水準記法の抽象化

ベストプラクティスをデフォルト設定とし、設定を明示しない限りそこを気にせず高水準に書ける. 最初はベストプラクティスに透過的に乗っかって、必要な段階になったらベストプラクティスの内容と理由を理解つつ設定を書く. 設定をわざとできなくするのは"op…

あり続けるweb技術

アクセス制御 (認証N/認可Z) データソース 計算資源 (サブルーチン) APIGateway/AppSync ~ API Endpoint (Server) の仕事は? API Endpointの提供 ソースから独立したAPI Endpoint 文字通りinterface (変わらない型) なのでバックエンド変更が可能 単一防御…

エラーと人とプログラミング

We Want to Write Logics, NOT to Fix Bugs. But Human make mistakes. 人は間違う、ゆえに動作確認がいる 人はエラーを起こす 人はプログラムを書く ゆえに、プログラムはエラーを起こす 人のおこなった処理はエラーを含む。 エラーを避ける/直すの仕組みが…

Null安全にかかわる私の指針

Null安全とは 実行時にNullを想定しない場所にNullが表れ問題を起こす、ことが起きないと保証された状態. 安全性という意味では、Nullに対する不正演算には例外を投げると言語仕様にある限り、いちおう安全ではあるはず. 基本的な考え NullとNumber, NullとS…

プログラムの正当性を保証する方式

安全性に関する指針みたいなもの Null安全: Non-Nullable型/Nullable型の明示によるNull安全の保証 プロパティ未初期化

「プレッシャーをかけられても思考は速くならない。」

プレッシャーをかけられても思考は速くならない。 オラクル PEOPLE UNDER PRESSURE DON'T THINK FASTER. Best regards, The Oracle from トム・デマルコ (1999) 「デッドライン -ソフト開発を成功に導く101の法則-」伊豆原弓訳. 1版6刷. p196. プレッシャー…

Git運用方針

論理・哲学の詳細は別記事にて。 branchモデル: git-flow branch統合手順: merge --no-ff (never rebase, always --no-ff) commitログ形式: Add/Fix/Refactor

デザインパターン

設計様式 上手くいくお決まりのやり方 構造みたいなもの こんな設計パターンだとこんな問題が! しかし、こっちの設計パターンならその問題からおさらばできる!最高!

Ops的思想

運用/operations 「サービスが定義された機能を提供する状態」を作り出し続けること 現在の状態は観測されないかぎり不明: 観測 = 監視 Devに強いエンジニアとOpsに強いエンジニアが各々の視点で共通のコードベースを触るのがベスト

ソフトウェアやサービスの何が重要なのか

ソフトウェア、サービス: ユーザーに使われるもの ユーザーに価値を提供するもの 価値そのものを生む場所、価値を生むことを実現する技術 スーパー黒子 DDDにおけるドメイン: 価値の源泉 ソフトウェア/サービスと金の延べ棒の違い 利用に価値があるのか、存…

Dual-Interface & Adapter (Dual-IA)

Dual-Interface & Adapter 良い分離面設計をするために、各coreがownershipもってinterfaceを定義する. interface間をadapterでつなぐ. どう分割面を設計するか、の指針 (何に基づいて分割するか、は扱わない.) domain - interface <= adapter => 外部API と…