TECH PLAY

MLOps

むベント

該圓するコンテンツが芋぀かりたせんでした

マガゞン

技術ブログ

みなさん、こんにちは。株匏䌚瀟 APTO で Physical AI のデヌタ基盀を構築しおいる田䞭です。 近幎、ロボット向け VLA モデルの台頭により、AI 開発の成吊は「孊習デヌタの品質」に匷く䟝存するようになっおいたす。 しかし、倧容量か぀厳密な同期が求められるロボットの操䜜デヌタを品質を萜ずさずに日々収集するこずは非垞に困難であり、Physical AI 開発における最倧のボトルネックずなっおいたす。 このブログでは、同じ課題に盎面するチヌムの参考ずなるよう、APTO 瀟がこの「デヌタ収集」のハヌドルをどのように仕組み化しお解決したのかを玹介したす。 想定読者 Physical AI / ロボティクス分野でデヌタ基盀を蚭蚈しおいる方 AWS 䞊で倧量デヌタのむベント駆動凊理を構築しようずしおいる方 スタヌトアップで少人数チヌムの MLOps を運甚しおいる方 APTO が AWS 䞊に構築しおいる双腕遠隔操䜜ロボット向けの Physical AI デヌタ基盀に぀いお、䞋の図 1 でグリヌンの  ① 収集 の郚分 — ゚ッゞ偎で完党性をどう確定させ、Amazon S3 ぞどう匕き枡しおいるか — を 3 章シリヌズの第 1 章ずしお解説したす。デヌタ基盀の党䜓像は「収集 → キュレヌション → 拡匵 → å­Šç¿’ → 評䟡」ずいう MLOps ルヌプで構成されおおり、第 2 章ではクラりド偎の自動キュレヌションパむプラむンに盞圓する ② キュレヌション 、第 3 章では ③ 拡匵 および ④ å­Šç¿’ ぞの接続を扱う予定です。なお、本皿で扱う ① 収集でぱッゞ偎のチェックを「デヌタの同期が取れおいるか」に絞っおおり、品質スコアリング・重耇刀定・PII怜査・統蚈集蚈などのキュレヌション工皋はすべおクラりド偎で実斜する蚭蚈です。 図 1: MLOps ルヌプ党䜓像 — 収集が本皿のスコヌプ   1. APTO ず Physical AI APTO は 2020 幎 1 月蚭立、東京郜千代田区にある玄 40 名のスタヌトアップです ( APTO 䌚瀟抂芁 2026時点)。「むノベヌティブなアノテヌションで AI 開発に倉革を」を掲げ、AI デヌタプラットフォヌム harBest を軞に、画像・動画・3D (LiDAR)・自然蚀語・音声たで幅広い孊習デヌタ事業を展開するスタヌトアップです。近幎は LLM 開発支揎、RLHF、゚ヌゞェント、RAG ずいった領域に加え、Physical AI のナヌスケヌスを増やしおいたす。 その䞀環ずしお、双腕の遠隔操䜜ロボット (bimanual teleoperation robot) からデヌタを集め、Vision-Language-Action (VLA) モデルのファむンチュヌニングに䟛する自瀟基盀を AWS 䞊で開発しおいたす。本基盀の䞭心は「収集 → 自動キュレヌション → 孊習」のルヌプを効率よく回し続けるための仕組みであり、このブログではそのうち最も䞊流にあたる「収集」を扱いたす。 2. 背景ず課題 Physical AI ずデヌタ基盀の関係 Vision-Language-Action (VLA) モデルは、芖芚ず蚀語指瀺を統合しおロボットの動䜜を生成する基盀モデルずしお、研究ず産業応甚の䞡面で進展しおいたす。Google DeepMind の RT-2 、Physical Intelligence の π0 など、倧芏暡 VLA モデルが盞次いで発衚されおおり、ファむンチュヌニング向けの高品質デヌタセットぞの需芁は今埌も拡倧が芋蟌たれたす。 ファむンチュヌニングの成吊は、モデルアヌキテクチャの良し悪し以䞊に「投入するデヌタが安定した品質で揃っおいるか」に䟝存したす。LLM の RLHF デヌタセットに察する経隓則ず同じく、Physical AI でもデヌタおよびそれを提䟛するデヌタ基盀の完成床がモデル品質の䞊限を決める構造になり぀぀ありたす。 デヌタを利甚する䞊で盎面する 3 ぀の構造的課題 Physical AI のデヌタパむプラむンを運甚しようずするず、次の課題に必ず突き圓たりたす。 収集珟堎の䞍安定性 : 双腕ロボットの遠隔操䜜䞭に PC が萜ちる、USB が倖れる、オペレヌタが途䞭で介入する、ずいった事象は日垞的に発生したす。1 件でも砎損゚ピ゜ヌドが混入すれば、その埌の再珟実隓や孊習指暙の信頌性が損なわれたす。 埌段クラりドで品質刀定するコスト : 1 ゚ピ゜ヌドが数癟 MB〜数 GB に達するため、「ひずたず Amazon S3 にアップロヌドしおから品質刀定する」蚭蚈では、転送・ストレヌゞ・再ハッシュのコストが線圢に積み䞊がりたす。 手動キュレヌションの限界 : 収集 → キュレヌション → å­Šç¿’ のルヌプを回すには、目芖確認・品質ラベル付け・Snapshot 構成ずいった工皋を機械化しなければ、収集にキュレヌションが远い぀きたせん。 本基盀が目指す状態 これらを螏たえ、APTO の Physical AI デヌタ基盀は次の状態を実装目暙ずしおいたす。 䞍完党な゚ピ゜ヌドは ゚ッゞ偎で陀倖 し、Amazon S3 には「完成した゚ピ゜ヌドだけ」が届く Amazon S3 ぞの到着をむベント駆動で受け取り、人間の刀断は Release 承認のみ に限定する レビュアヌは、クラりド偎のキュレヌションパむプラむンが算出する品質ゲヌト結果・デヌタセット統蚈・lineage を芋お承認 / 差し戻しを刀断する (詳现は次回ブログで扱う) デヌタの ID をハッシュから導出し、ingest を 冪等 にする (同じデヌタを䜕床取り蟌んでも結果が倉わらない)   3. Physical AI のデヌタ収集が難しい理由 図 2: 収集からキュレヌションたでのデヌタフロヌ党䜓像 暡倣孊習 (imitation learning) は、お手本ずなるデモンストレヌションデヌタを再珟するようにポリシヌモデルを孊習させる手法です。Physical AI の文脈では、教垫デヌタの候補ずしお 人間のテレオペレヌションで収集されたデヌタずシミュレヌション環境で生成された合成デヌタが挙げられたす。珟時点では動䜜や映像の自然さや接觊の忠実床ずいった面でテレオペデヌタの方が品質が高いず考えられ、倚くの堎合は人間が遠隔操䜜したロボットの動䜜を再珟するようにモデルを孊習させたす。VLA モデルのファむンチュヌニングでは、この教垫デヌタずしお甚いる「人間のデモンストレヌション」が䞀定品質で揃っおいるこずが前提ずなりたす。 ずころがロボットの生ログには、次の䞉぀のノむズが必ず混入したす。 アクションず状態の混圚 : 双腕遠隔操䜜では、人間が操䜜するリヌダヌアヌムず远埓するフォロワヌアヌムを別ストリヌムずしお残さないず、 action ず state が同䞀テン゜ルに混ざっおしたいたす。これは孊習偎のラベル蚭蚈を砎壊したす。 同期ズレ : カメラフレヌムずモヌタサンプルのタむムスタンプ差分が䞀定倀を超えるず、芖芚ず動䜜の察応関係が厩れたす。本実装では WARNING / CRITICAL2ms / 5msの二段階閟倀で逐次刀定しおいたす。 ゚ピ゜ヌドの欠損 : 曞き蟌み䞭に PC が萜ちた、人間が途䞭で介入した、ずいった理由で䞍完党な゚ピ゜ヌドが混じりたす。1 件の混入で再珟実隓の信頌性が倱われたす。 図 3: 双腕遠隔操䜜の Leader / Follower 構成   これらを埌段のクラりドで陀去する蚭蚈は費甚察効果が悪く、Amazon S3 にアップロヌドしおから「䞍完党だった」ず刀明する経路では、転送ず再ハッシュのコストが線圢に積み䞊がりたす。本基盀でぱッゞ偎で完党性を確定させ、䞍完党な゚ピ゜ヌドは S3 に枡さないこずを蚭蚈の出発点ずしたした。 4. 蚭蚈を貫く 3 原則 本基盀を貫く蚭蚈原則は次の 3 ぀です。デヌタ品質を担保するためのルヌルずしお先に定矩し、そのうえでルヌルに則っお AWSのサヌビスや機胜を遞定しおいたす。 Immutability : Episode / Snapshot / Batch は䞀床䜜ったら曞き換えたせん。修正は新ハッシュで別゚ンティティを䜜り、 derived_from で系譜を残したす。 Content-Addressed Storage : ゚ピ゜ヌドの ID はファむル矀の決定論的ハッシュから導出したす。同じデヌタを䜕床取り蟌んでも同じ ID になり、ingest が冪等になりたす。 Event-Driven : 完了した゚ピ゜ヌドの到着を S3 むベントで怜知し、自動凊理を駆動したす。人間の刀断は Release 承認のみに限定したす。   5. 収集゚ンゞンの 3 プロセス構成 図 4: sync-engine の 3 プロセス分離   ゚ッゞ PC 偎の収集゚ンゞン (sync-engine) は、責務の異なる 3 ぀のプロセスを共有メモリ ( SharedRingBuffer ) で接続する構成を採っおいたす。 Collector プロセス : センサヌずカメラからの読み取り、H.264 ず FFV1 (深床) の動画゚ンコヌドを担圓したす。 Sync プロセス : メタデヌタだけでタむムスタンプを照合し、同期品質を逐次刀定したす。 Storage プロセス : motor_state.bin / sync_log.bin / events.jsonl などのバむナリファむルをディスクに曞き出したす。 この 3 プロセス構成は、埌述する異垞停止時の安党装眮 (QualityMonitor) ず盎接結び぀きたす。Sync プロセス内で品質劣化を怜知した時点で multiprocessing.Event を立お、Collector / Sync / Storage の 3 ぀を同時にグレヌスフル停止し、゚ピ゜ヌドに .failed センチネルを眮く流れです。 6. raw フォヌマットの蚭蚈 珟状のフォヌマット遞定ず今埌の方向性 ゚ッゞで保存する原本 (raw) のフォヌマットは、孊習で䜿う LeRobot v3.0 ぞの倉換前デヌタを栌玍するレむダです。Physical AI / ロボティクスで䞀般に怜蚎される候補ず評䟡ポむントを䞊べるず次のようになりたす。 候補 評䟡ポむント apto-raw-v5 (珟行詊行) 倉換前の物理局を可逆に残せる。圓面の運甚には十分だが暙準ではない MCAP (Foxglove + ROS 2) スキヌマず可芖化が匷い。ロスレス深床動画 (FFV1) や CAN-FD 生ログを 1 階局に同居させる運甚を確立できれば有力候補 HDF5 自己 蚘述型で扱いやすい䞀方、動画コヌデックの遞択肢が限定的、巚倧単䞀ファむルが S3 のオブゞェクト単䜍アップロヌド郚分取埗ず盞性が悪いずいう課題 Apache Arrow IPC 列指向で孊習偎ずの芪和性は高い。Stream Format で远蚘は可胜だが、゚ピ゜ヌド途䞭で異垞終了した際の敎合性保蚌が珟時点のネック これらを螏たえ、珟時点では自前の apto-raw-v5 を詊行的に採甚しおいたす。暙準フォヌマット偎で「ロスレス深床動画 + CAN-FD 生ログを 1 階局に同居させる」運甚ノりハりが揃いきっおいないため、たずは可逆性ず運甚容易性を優先した暫定解ずいう䜍眮づけです。 ただし、このレむダのフォヌマット遞定は匕き続き怜蚎䞭で、Physical AI 呚蟺のフォヌマット暙準は流動的なため、将来的に MCAP などの暙準フォヌマットぞ移行する可胜性は残しおいたす。いずれを採るにせよ、(1) 党タむムスタンプを int64 ナノ秒で統䞀する、(2) CAN-FD 生ログをそのたた保持する、(3) 深床動画をロスレスで保持する、ずいう䞉点はフォヌマット遞定に䟝らず満たす方針です。これらは将来「キュレヌションをやり盎す」「別の特城量を埌付けで蚈算する」ずいう芁件に盎接効いおきたす。 クロック同期源 i64 ns で粟床を確保しおも、各センサヌのクロック源が揃っおいなければ同期刀定そのものが意味を倱いたす。本基盀では次の方針を取っおいたす。 カメラ : PTP (IEEE 1588) 察応の GigE Vision カメラを採甚し、PC ホストを PTP マスタずしお党カメラを同期。フレヌムには PC 受信時刻ではなくカメラ偎ハヌドりェアクロックのタむムスタンプを正ずしお保存したす。 モヌタ (CAN-FD) : CAN フレヌム自䜓はタむムスタンプを持たないため、CAN コントロヌラの SOF 受信タむミングを PC ホストの CLOCK_MONOTONIC_RAW で打刻しおいたす。CANコントロヌラのHWタむムスタンプを䜿う方法も考えられたす。 WARNING / CRITICAL 閟倀の根拠 : カメラフレヌム間隔 33 ms (30 fps) に察し、サブフレヌム粟床を保぀ために WARNING 2 ms、CRITICAL 5 ms を蚭定。CRITICAL を超えるずフレヌム内での芖芚ず動䜜の察応関係がずれ、暡倣孊習で扱えなくなりたす。 PTP 同期がない環境では NTP のミリ秒粟床に劣化し、CRITICAL を超えるリスクが増えたす。本基盀を別環境に適甚する堎合は、たずクロック同期源の遞定が出発点になりたす。 7. 完党性を゚ッゞで確定させる仕組み 収録䞭の電源断・プロセスクラッシュで、゚ピ゜ヌドが「途䞭たで曞かれた状態」になるこずは避けられたせん。問題はそれを埌段が完成枈みず誀認するこずです。誀認するず䞍完党なデヌタが孊習デヌタセットに混入したす。゚ッゞ偎では「途䞭で壊れた状態の゚ピ゜ヌドを䞋流に流さない」こずを最優先にしおいたす。 ゚ッゞでは抜象床の異なる3぀の局で完党性を担保したす。 防ぐ倱敗 仕組み 倱敗時のマヌカヌ レむダ 1: ファむル単䜍 単䞀ファむルが曞きかけのたた本来名で残る アトミック曞き蟌み: .part 拡匵子で曞き出し → fsync → atomic rename 䞭間ファむルは .part のたた残る本来名は存圚しない レむダ 2: ゚ピ゜ヌド単䜍 個々のファむルは完党だが、゚ピ゜ヌド党䜓ずしおは途䞭で䞭断しおいる .done センチネルによる完了刀定。党ファむルが揃った埌に .done センチネルを眮く .done が存圚しない レむダ 3: 意味的品質 ファむルずしおは完党だが、同期ズレで孊習に䜿えない 同期品質劣化時の安党停止 (QualityMonitor): QualityMonitor が閟倀超過を怜知 .failed を眮く 埌段クラりド ingest や Storage プロセス偎のスキャナは、この3぀のマヌカヌだけを芋お「完了 / 未完了 / 倱敗」を刀定したす。䞭身のパヌスや SHA-256 怜蚌は埌段の責務ずしお明確に切り分けおいたす。 ファむルの存圚だけを完了条件にしおいる理由は、 埩旧時の刀断を静的怜査だけで完結させたい ためです。「特定ファむルが存圚するか吊か」だけで刀定できれば、埩旧ロゞック自䜓を実質的に れロにできたす。埌述する Amazon S3 Event Notifications のフィルタ蚭蚈も、この原則の延長線䞊にありたす。 党䜓シヌケンス たず初めに党䜓の流れを図瀺したす。 各デヌタファむルを .part で曞き出し → fsync → atomic rename manifest.json を atomic write + 芪ディレクトリ fsync 正垞完了なら .done、異垞停止なら .failed を touch RawUploadAgent が各ファむルを䞊列 PUT 埌、manifest.json を最埌に PUT しお S3 Event を発火 ファむル単䜍のアトミック曞き蟌み 個々のファむルは次の手順で曞き出したす。 .part 拡匵子で曞き出す䟋: cam_front.mp4.part  曞き終わったら fsync() でデヌタを物理デバむスに氞続化する os.replace() で .part を本来名䟋: cam_front.mp4 にアトミックに rename する 芪ディレクトリに察しお fsync() を呌び、ディレクトリ゚ントリの倉曎も氞続化する この手順を守るこずで、電源断が起きおも「叀い完党なデヌタが残っおいる」「新しい完党なデヌタが眮かれおい る」「 .part のたた残っおいる」のいずれかにしかならず、 本来名で半端なファむルが芋える状態は発生したせん 。 manifest.json も同じ手順で曞き出したす。 たた、゚ッゞストレヌゞ は NVMe SSD + ext4 (data=ordered) を採甚しおいたす。ext4 の data=ordered モヌドでは、デヌタブロックがゞャヌナル commit より先にディスクぞ曞き出されるこずが保蚌されたす。このため、fsync() + os.replace() の組合せでクラッシュ埌も「叀い完党なデヌタ」たたは「新しい完党なデヌタ」のどち らかが必ず芳枬されたす。これは アトミック曞き蟌みが成立する前提条件です。NFS / FUSE 等にファむルシステムを倉曎する堎合、アトミック曞き蟌みが砎綻する可胜性があるため、必ず再評䟡が必芁です。 ゚ピ゜ヌド単䜍の完了刀定 すべおのファむルが揃った時点で、゚ピ゜ヌドディレクトリ盎䞋に .done を touch したす。途䞭で䞭断した堎合は .done を眮かないか、QualityMonitor が .failed を眮きたす。 完了怜知は、 .done ず manifest.json の䞡方が揃っおいるかだけで刀断したす。䞭身のパヌスや敎合性チェックはクラりド偎 ingest の責務ずしお埌段に切り分けおいたす。 意味的品質を守る安党装眮 (QualityMonitor) ファむルが完党に曞けおも、収録䞭の同期品質が劣化しおいれば孊習には䜿えたせん。Sync プロセスはカメラフレヌムず最近傍モヌタサンプルのタむムスタンプ差分同期ズレを逐次監芖しおいたす。この差分の時系列は原本䞭の sync_log.bin に保存され、埌段の品質ゲヌトでも参照できたす。 QualityMonitor が .failed を眮く刀定条件は次の二぀です。 CRITICAL レベルのドリフトが䞀定フレヌム数連続する 芳枬りィンドり内で CRITICAL の割合が䞀定割合を超える いずれかを満たした時点で、3 プロセス党䜓Sync / Storage / Cameraをグレヌスフル停止し、゚ピ゜ヌドに .failed センチネルを眮きたす。これにより、品質が劣化したフレヌムが含たれる゚ピ゜ヌドはクラり ドに枡る前に゚ッゞで陀倖されたす。 8. Amazon S3 ぞのアップロヌド manifest.json を最埌に PUT する蚭蚈 RawUploadAgent は完了した゚ピ゜ヌドのディレクトリを 1 ファむルず぀ Amazon S3 raw バケットにアップロヌドしたす。ここで重芁なのは、 manifest.json を 最埌に PUT するこずです。 理由はクラりド偎の S3 Event Notifications ずの接続にありたす。1 ゚ピ゜ヌドから 8 オブゞェクト前埌が生成されたすが、すべおに察しおむベントを発火させるず䞋流の Amazon SQS キュヌが 8 倍に膚らみたす。さらに、ただアップロヌド途䞭の状態で Worker が S3 を読みに行くず、ファむル䞍䞀臎による停の IntegrityError が DLQ に積たれおしたいたす。 そこで、(1) S3 Event Notifications 偎でフィルタを filter_suffix = "/manifest.json" に絞り、(2) manifest.json は他の党ファむルの PUT が完了しおから最埌に眮く、ずいう二段の制玄で「完了した゚ピ゜ヌド 1 ぀に察しお SQS メッセヌゞ 1 ぀」を成立させおいたす。 この蚭蚈が成立するのは、S3 Event Notifications がオブゞェクトキヌの prefix / suffix フィルタをネむティブにサポヌトしおいるからです。Terraform での蚭定はほが次の 1 ブロックに収たりたす。 resource "aws_s3_bucket_notification" "raw" { bucket = aws_s3_bucket.raw.id queue { queue_arn = aws_sqs_queue.s3_events.arn events = [ "s3:ObjectCreated:Put" ] filter_suffix = "/manifest.json" } depends_on = [aws_sqs_queue_policy.s3_events] } filter_suffix を /manifest.json に固定するだけで、゚ッゞ偎が manifest.json を最埌に PUT した瞬間にのみ SQS メッセヌゞが 1 件キュヌに入る関係が S3 偎で完結したす。 実装は concurrent.futures.ThreadPoolExecutor で䞊列 PUT し、 as_completed() で党 future の完了を埅っおから manifest.json を PUT したす。1 ぀でも倱敗しおいれば䟋倖を䌝播させ、 .failed を残しお゚ピ゜ヌド党䜓を砎棄したす。 from concurrent.futures import ThreadPoolExecutor, as_completed def upload_episode (episode_dir: Path , bucket: str , key_prefix: str ) -> None : data_files = [f for f in episode_dir.iterdir() if f.name not in { "manifest.json" , ".done" }] with ThreadPoolExecutor(max_workers= 8 ) as pool: futures = [pool.submit(_put_with_checksum, f, bucket, f"{key_prefix}/{f.name}" ) for f in data_files] for fut in as_completed(futures): fut.result() # raise on failure → episode を砎棄 # 党デヌタファむル PUT 完了埌に manifest.json を最埌に PUT # → S3 Event Notifications の filter_suffix="/manifest.json"が発火 _put_with_checksum(episode_dir / "manifest.json" , bucket, f"{key_prefix}/manifest.json" ) _put_with_checksum は boto3 の put_object(ChecksumAlgorithm="SHA256") を呌び、S3 の Additional Checksum 機胜でサヌバ偎でも SHA-256 を再蚈算させおオブゞェクトメタデヌタに保存したす。Worker 偎の再蚈算怜蚌ず組み合わせ、デヌタ敎合性は二重に担保しおいたす。 .tar でたずめない理由 今回ぱピ゜ヌドを .tar でたずめずに、ディレクトリ構造をそのたた Amazon S3 のキヌ階局に写し取る方針を採っおいたす。tar 䞀括 PUT 案ず個別 PUT 案を粟査した結果、コスト差は小さく(珟状 8 ファむル/゚ピ゜ヌド芏暡で損益分岐は玄 43 ファむル)、刀断は技術芳点で決たりたした。個別 PUT を遞んだ䞻な理由は次の通りです。 埌段 Stage の非察称なアクセスパタヌン : CosmosStage(映像品質刀定)は動画のみ、孊習(DataLoader)は Parquet のみを必芁ずしたす。個別 PUT なら必芁なファむルだけ GET できたすが、tar 化するず毎回党䜓を GET しお展開する必芁があり、特に GPU ノヌドで I/O 埅ちが発生するのは蚭蚈ずしお䞍適切です。 CopyObject による stream-copy 最適化が厩れる : ColdConvertStage では動画を raw から cold ぞ CopyObject で転蚘し、ECS Worker の CPU・垯域コストをれロに抑えおいたす。これは個別ファむルが独立した S3 オブゞェクトずしお存圚するこずが前提です。 tar の「党か無か」性質ずの䞍敎合 : 郚分砎損で党䜓が読めなくなる、Range Request で郚分読みできない、Glacier 埩元で毎回党䜓を取り出すこずになる、IAM / KMS 粒床がファむル単䜍で切れない、ずいった問題が積み重なりたす。 なお tar 圢匏そのものを吊定しおいるわけではなく、孊習配垃甚の WebDataset 圢匏や Glacier Deep Archive ぞの長期アヌカむブなど、raw アップロヌド経路ずは別レむダヌで tar 化する䟡倀がある甚途は存圚したす。 9. たずめず次回予告 このブログでは、Physical AI のデヌタ基盀においお「完成した゚ピ゜ヌドだけを AWS に枡す」状態を゚ッゞ偎でどう䜜るかを解説したした。芁点は次の䞉点です。 自前フォヌマット apto-raw-v5 を採甚 : i64 ns タむムスタンプ・CAN 生ログ・ロスレス深床を 1 階局で保持しおいたす。MCAP / HDF5 / Apache Arrow IPC のいずれでもこの組合せを単独では満たせなかったためです。 完了刀定をファむル存圚のみに統䞀 : .done ず manifest.json の䞡方が揃ったずきだけ完了ずみなす原則を採り、状態機械の耇雑化を避けたした。これがクラりド偎のむベント駆動蚭蚈に盎結したす。 manifest.json を最埌に PUT : Amazon S3 Event Notifications を「゚ピ゜ヌド完了 = 1 通知」ずいう察応関係に敎理したした。 Physical AI のデヌタパむプラむンを長く回し続けるには、「機械的にやれる工皋は党郚自動に寄せ、人間の刀断を Release 承認だけに集䞭させる」こずが鍵ずなりたす。゚ッゞ偎で完党性を確定させる本皿の蚭蚈は、その自動化を成立させる土台です。 第 2 章では、この manifest.json 到着むベントを起点に動く AWS 偎のキュレヌションパむプラむンを扱いたす。Amazon S3 → Amazon SQS → Amazon ECS Fargate Worker のむベント駆動 ingest、Episode / Snapshot / Batch の 3 局モデル、9 サブステップの構造化キュレヌションず 2 階局品質ゲヌトが䞭心です。続く第 3 章では、デヌタ拡匵ず VLA ファむンチュヌニングぞの接続、シミュレヌション環境ずの統合、マルチロボット察応の方向性を予告線ずしおお届けしたす。 同じような課題に取り組たれおいるスタヌトアップの参考になれば幞いです。 We are hiring!! APTOは、AIやPhysical AI領域のデヌタに特化したサヌビスを提䟛しおいたす。 技術の実装を進めたい方、研究開発に興味がある方などは、䞋蚘採甚ペヌゞから゚ントリヌください https://apto.co.jp/careers/ 著者プロフィヌル 田侭 達也 (Tatsuya Tanaka) APTOにおPhysical AIやロボティクス領域のデヌタパむプラむン開発、およびUI構築をメむンに担圓しおいるAI゚ンゞニアです。デヌタの同期やマルチモヌダルデヌタ管理など、AI掻甚に向けたデヌタ基盀の蚭蚈・開発に埓事しおいたす。趣味は競技プログラミングず陞䞊芳戊。孊生時代は陞䞊䞀筋でしたが、珟圚はもっぱら芋る専門です。 遠藀 俊策 (Shunsaku Endo) ポゞション: Co-founder / AI Engineer バンタンゲヌムアカデミヌで、孊内の審査䌚で数々の賞を受賞。その埌、AI開発にも興味を持ち2020幎1月にAPTOを共同創業。珟圚は、APTOのCDOずしお開発ずビゞネス双方を管理。 GitHubアカりント: synsax( https://github.com/synsax ) 黒柀 蓮 (Ren Kurosawa) は AWS Japan の゜リュヌションアヌキテクトで、Startup 業界のお客様を䞭心にアヌキテクチャ蚭蚈や構築をサポヌトしおいたす。デヌタアナリティクスサヌビスや機械孊習の領域を埗意ずしおいたす。将来の倢は宇宙でポ゚ムを詠むこずです。  
みなさんこんにちはワンキャリアのプロダクト開発郚 ワンキャリア転職チヌムの越川X@kosshii_です。 前回は、プロダクト開発チヌムの゚ンゞニア4名に「孊びになった技術曞トップ3」を聞いおみたした。新卒゚ンゞニアの「本を読んで勉匷したいけど、䜕から読めばいいかわからない」ずいう悩みに寄り添った蚘事になっおおりたすので、是非、本蚘事ず䞀緒にご䞀読いただきたいです â–Œ Part1はこちら
こんにちは、株匏䌚瀟タむミヌでMLOps゚ンゞニアをしおいるKYです。普段はMLプラットフォヌムの構築・運甚を担圓しおいたす。 実務の䞭でコンテナむメヌゞのサプラむチェヌンセキュリティ匷化を進めおおり、その䞀環ずしお Docker 瀟が提䟛する「Docker Hardened ImagesDHI」の実装を蟿る機䌚がありたした。 その際、実際の定矩ファむルを芋お、少し驚きたした。コンテナのビルド定矩ずいえば「Dockerfile」が圓たり前だず思っおいたのですが、DHI の定矩はなんず YAML で曞かれおいたのです。 「なぜ Dockerfile ではないのか」ず定矩の読み方を远いかけおいくうちに、BuildKit のアヌキテクチャに行き着きたした。この蚘事では、DHI の仕組みを通じお、私たちが普段の Dockerfile 運甚で抌さえるべきポむントを再確認したいず思いたす。 ビルド定矩の䞻圹は「Frontend」 BuildKit は、「定矩を解釈する郚分Frontend」ず「実際にビルドを実行する郚分Backend」に分離しおいたす。Frontend は、入力Dockerfile や YAMLを BuildKit の䞭間衚珟LLBに倉換する圹割を持ちたす。 ここで鍵になるのが、ファむル先頭のコメント行 # syntax=... です。BuildKit はたずこの1行を読み、どの Frontend で埌続を解釈するかを決めたす。぀たり、Docker 公匏が掚奚しおいるのに芋萜ずされがちな以䞋の1行は、単なるコメントではなく「このファむルは公匏の Dockerfile Frontend で解釈しおほしい」ずいう宣蚀です。 # syntax=docker/dockerfile:1 䞀方で DHI の定矩ファむルを開くず、YAML の1行目に次の指定がありたす。 # syntax=dhi.io/build:2-debian13 YAML も # をコメントずしお扱うため、BuildKit から芋れば「 # syntax= から始たるビルド定矩」ずいう意味で入口は同じ。その埌の䞭身を YAML ずしお解釈するのは、差し替えられた DHI Frontend の仕事 ずいうわけです。 DHI は䜕をしおいるのかYAML をコンパむルする DHI の定矩ファむルYAMLは、 RUN apt-get... のようにずいった手順を重ねるのではなく、「最終的に䜕を入れるか」ずいう状態を宣蚀したす。 【DHI の YAML 定矩䟋実際の定矩ファむルからの抜粋】 # syntax=dhi.io/build:2-debian13 name : Debian 13 Base image : dhi.io/debian-base variant : runtime platforms : - linux/amd64 - linux/arm64 dates : release : "2025-08-09" end-of-life : "2028-08-09" contents : packages : - '!libelogind0' - '!mawk' - '!original-awk' - base-files - bash - ca-certificates - coreutils # ... 以䞋、ベヌスに含めるパッケヌゞの列挙が続く accounts : run-as : nonroot users : - name : nonroot uid : 65532 gid : 65532 cmd : - /bin/bash いく぀かのフィヌルドに泚目しおみたす。 contents.packages : !mawk のように ! プレフィックスを付けるず「明瀺的に含めない」パッケヌゞを宣蚀できたす。削陀手順を曞くのではなく、最初から「入れない」ず衚明する点が Dockerfile ずの倧きな違いです。 accounts.run-as: nonroot : 実行ナヌザヌを非 root に固定する宣蚀で、Dockerfile の USER 呜什に盞圓したす。Dockerfile のように RUN useradd ... ずいったナヌザ䜜成手順を曞く必芁はなく、「誰で動かすか」ずいう状態だけが残る点が特城です。 dates.end-of-life : むメヌゞのラむフサむクル終了日たで定矩に含たれおおり、運甚䞊の管理情報もビルド定矩の䞀郚ずしお扱われおいたす。 このように、DHI の YAML は「どう䜜るか」ではなく「䜕が入っおいお、誰が動かすか」を宣蚀しおいたす。そしおここで重芁なのは、 BuildKit が YAML を盎接ビルドしおいるわけではない ずいう点です。 DHI の Frontend がこの YAML を読み蟌んで䞭間衚珟LLBぞコンパむルし、あずは通垞通り BuildKit がビルドを実行したす。぀たり、DHI の YAML は「別蚀語」ではなく、 Frontend を差し替えお埗た “別の入力圢匏” なのです。 たずえば䞍芁パッケヌゞの陀倖ひず぀ずっおも、Dockerfile では apt-get remove → autoremove → キャッシュ削陀ず手順を重ねる必芁がありたす。䞀方、DHI なら - '!mawk' の1行で意図が完結したす。手順Howではなく意図Whatだけが残るため、セキュリティ監査や再珟性の面で有利です。DHI が宣蚀的定矩を採甚しおいるのは、こうした盞性の良さがあるからです。 忘れられがちな Dockerfile の公匏掚奚蚭定 今埌、DHI のような宣蚀的フロント゚ンドがすぐに䞻流になるかは未知数であり、圓面は既存の Dockerfile 運甚が続くでしょう。 しかし、DHI が瀺す「Frontend は明瀺し、遞ぶものである」ずいう芳点は重芁です。たずは Docker 公匏が掚奚する以䞋の2行を、忘れずに Dockerfile の先頭ぞ蚘述したしょう。 # syntax=docker/dockerfile:1 # check=error=true # syntax=... 䜿甚する Frontend を固定し、手元の環境ず CI の違いによるビルド結果の揺れを防ぎたす。 # check=error=true BuildKit の静的解析lintを匷め、譊告レベルの蚘述を CI で匟けるようにしたす。 これらを習慣づけるだけで、「Frontend を明瀺し、品質を保぀」文化に確実に近づきたす。 たずめ DHI から孊べる本質は、 BuildKit は Frontend を自由に差し替えられる ずいう点にありたす。この芖点を持぀ず、DHI は単なるセキュアなベヌスむメヌゞではなく、ビルド定矩の抜象床を䞀段䞊げる詊みずしお芋えおきたす。 「手順を曞く」から「状態を宣蚀する」ぞの移行は、Infrastructure as Code で䜕床か芋おきた流れず重なっお芋えたす。DHI を觊っおみお、その発想がコンテナビルドの入力圢匏にも持ち蟌たれおいるこずを実感したした。 将来的にビルドのパラダむムがどう倉わるにせよ、たずは芋逃されがちな # syntax=... ず # check=... をきちんず眮くこず。タむミヌでも Cloud Run / Vertex AI Pipelines の DHI 移行を進める䞭で、Frontend 指定の差がビルド結果の揺れに盎結する堎面に䜕床か遭遇し、この2行の重芁性を改めお感じたした。DHI がもたらした芖点を持ち぀぀、足元の運甚を公匏のベストプラクティスで堅牢にする。これが、珟実的で安党なコンテナ運甚の第䞀歩です。 参考文献 Docker Hardened Images - カタログリポゞトリ Debian 13 Base 定矩ファむル13.yaml — 蚘事䞭の YAML 定矩䟋の抜出元 Custom Dockerfile syntax - Docker Docs Build hardened images - Docker Docs We're Hiring! サプラむチェヌンセキュリティや ML 基盀の足回りに興味を持っおいただけたなら、ぜひ䞀緒に働きたせんか。タむミヌでは、ML プラットフォヌムの構築・運甚やサプラむチェヌンセキュリティの匷化に取り組む゚ンゞニアを募集しおいたす 少しでも興味を持っおいただけたしたら、ぜひ以䞋のリンクから詳现をご芧ください。 MLOps゚ンゞニア シニアMLOps゚ンゞニア 募集ポゞション䞀芧

動画

曞籍