
- TOP
- ã¿ã°äžèЧ
- MLOps
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ãšã³ãžã㢠åéããžã·ã§ã³äžèЧ













