ããæ°å¹Žã§ãAIã¢ãã«ãä»åŸãå€ãã®ã¢ããªã±ãŒã·ã§ã³ã®åºæ¬çãªã³ã³ããŒãã³ãã§ããããšãæããã«ãªããŸãããåé¡ã¯ãããããæ ¹æ¬çã« ç°ãªã ã¿ã€ãã®ã³ã³ããŒãã³ãã§ããããè€éãªãœãããŠã§ã¢ãšããŒããŠã§ã¢ã®èŠä»¶ã(ãŸã )ã³ã³ããæåã®éçºã©ã€ããµã€ã¯ã«ãšã¢ãŒããã¯ãã£ã®å¶çŽã«ããŸãé©åããŠããªãããšã§ãããã®åé¡ã«å¯ŸåŠããããã«ãDocker 㯠Docker Desktop 4ã§ Docker Model Runner ããªãªãŒã¹ããŸããã40ããã以æ¥ãç§ãã¡ã¯ Docker Model Runner ã®æ¡åŒµã«ç©æ¥µçã«åãçµã¿ãOS ãšããŒããŠã§ã¢ã®ãµããŒãã远å ããäžè¬ç㪠Docker ããŒã«ãšã®ããç·å¯ãªçµ±åãè¡ããããã©ãŒãã³ã¹ãšãŠãŒã¶ããªãã£ãæ¹åããŠããŸããã
Docker Model Runner ãšãã®å°æ¥ã«é¢å¿ã®ããæ¹ã®ããã«ããã®èšèšãéçºãããŒããããã®èå°è£ãã玹ä»ããŸãã
æèšïŒ Docker Model Runner ã¯ãå®éã«ã¯ Model Runner ãš Model Distribution Specification ã® 2 ã€ã® ã³ã³ããŒãã³ãã§ãããã®èšäºã§ã¯ãåè ã«ã€ããŠèª¬æããŸãããã¹ããŒãªãŒã®åæ§ã«éèŠãªé åžã®åŽé¢ã«ã€ããŠã¯ãEmily Caseyã«ãã ã³ã³ãããªã³ããã°æçš¿ ãå¿ ããã§ãã¯ããŠãã ããã
èšèšç®æš
Docker Model Runnerã®äž»ãªèšèšç®æšã¯ããŠãŒã¶ãŒã AIã¢ãã«ãããŒã«ã«ã§å®è¡ ããã³ã³ãããšãã¹ãããã»ã¹ã®äž¡æ¹ããã¢ã¯ã»ã¹ã§ããããã«ããããšã§ãããããã¯ç°¡åã«è¡šçŸã§ããŸãããããã§ã解決çãèŠã€ããããã®å·šå€§ãªãã¶ã€ã³ç©ºéãæ®ãããŠããŸãã幞ããªããšã«ãç§ãã¡ã¯å°ããªãšã³ãžãã¢ãªã³ã°ããŒã ã§ãããéå¿çãªã¿ã€ã ã©ã€ã³ãæã£ãŠãããšããå¶çŽããããŸãããæãéèŠãªããšã¯ãUXãäžåºŠã«æäŸã§ããªããŠããUXã«åŠ¥åããããªãã£ãããšã§ããæçµçã«ã¯ããããèšèšäžã®æ±ºå®ãåæ©ä»ãããããŸã§ã®ãšãããå®è¡å¯èœãªãœãªã¥ãŒã·ã§ã³ãæäŸããªãããå°æ¥ã®æ¹åã®äœå°ãååã«æ®ãããšãã§ããŸããã
è€æ°ã®ããã¯ãšã³ã
æ©ã段éã§ããã£ãŠããããšã® 1 ã€ã¯ãç¬èªã®æšè«ãšã³ãžã³ãäœæããã€ããã¯ãªããšããããšã§ãã (Docker ã®æèµå®€ã¯ã³ã³ããåãããéçºã§ãããäœã¬ãã«ã®æšè«ãšã³ãžã³ã§ã¯ãããŸãã)ããŸããç§ãã¡ã¯ãªãŒãã³ãœãŒã¹ã®å€§ããªæ¯æè ã§ããããæ¢åã®çŽ æŽããããœãªã¥ãŒã·ã§ã³ããããããããŸãããllama.cppããããŸããvLLMãMLXãONNXãPyTorch ãªã©ãããŸããŸãªãã®ããããŸãã
ãã¡ãããéžæã®äœå°ããªããšããã®ã¯åªãã«ããªãåŸãŸã - ã©ã¡ããéžã¶ã¹ãã?æçœãªçãã¯ãäžåºŠã«ãã¹ãŠã§ã¯ãªããã§ããã ãå€ãã®äººãéžã¶ããšã§ããã
æåã®å®è£ ã§ã¯ llama.cpp ãæ¡çšããããšã«ããŸãããããŠãŒã¶ãŒãå°æ¥ã®è€æ°ã®ããã¯ãšã³ããå©çšã§ããããã«ãæå³çã«è¿œå ã®ãªãã·ã§ã³ã®ãã¹ã³ã³ããŒãã³ã (/engines/{name} ã® {name}}) ã䜿çšã㊠API ãèšèšããŸããããŸããä»ã®ããã¯ãšã³ãã®ã€ã³ã¿ãŒãã§ãŒã¹ãèšèšããå®è£ ãã¹ã¿ãã¢ãŠãããŠãéçºã®è¡çç¶æ ãè¯å¥œã«ä¿ã¡ã1ã€ã®ãåæãå®è£ ã«çžãããã®ãé¿ããŸããã
OpenAI API ã®äºææ§
ç§ãã¡ãè¡ããªããã°ãªããªãã£ã 2 çªç®ã®èšèšäžã®éžæã¯ãæšè«ãã³ã³ããå ã®æ¶è²»è ã«ã©ã®ããã«å ¬éãããã§ãããæšè« API ã®åéã§ãããªãã®éžæè¢ããããŸããããOpenAI API æšæºãåæããŒã«ã®äºææ§ãšããŠæé©ã§ããããã«æãããããšãããããŸããããŸããDocker å ã®ããã€ãã®ããŒã ãããã§ã«ãã® API ãããŸããŸãªçŸå®äžçã®è£œåã«äœ¿çšããŠãããšããäºå®ã«ãåæ©ä»ããããŸãããå°æ¥çã«ã¯è¿œå ã® API ããµããŒãããå¯èœæ§ããããŸããããããŸã§ã®ãšããããã® API ãµãŒãã§ã¹ã¯ã»ãšãã©ã®ã¢ããªã±ãŒã·ã§ã³ã«ãšã£ãŠååã§ããããšãããããŸãããç§ãã¡ãç¥ã£ãŠããã®ã£ããã®1ã€ã¯ããã®APIãµãŒãã§ã¹ãš ã®å®å šãª äºææ§ã§ãããããã¯ç§ãã¡ãç¹°ãè¿ãåãçµãã§ããããšã§ãã
ãã®æ±ºå®ã¯ãæåã®ããã¯ãšã³ããšããŠllama.cppãéžæãããã£ããã«ããªããŸãããllama.cppãããžã§ã¯ãã¯ã ãµãŒã㌠ã®å®è£ ãéããŠãOpenAI APIäºææ§ã®ã¿ãŒã³ããŒãªãã·ã§ã³ããã§ã«æäŸããŠããŸãããããã€ãã®å°ããªå€æŽãå ããå¿ èŠããããŸããã(äŸ:Unix ãã¡ã€ã³ãœã±ããã®ãµããŒã)ãããã«ããããœãªã¥ãŒã·ã§ã³ãžã®æéã®éçãæäŸãããŸããããŸãããããã®å°ããªããããã¢ããã¹ããªãŒã ã§æäŸãå§ããŠãããå°æ¥çã«ã¯ãããã®ãããžã§ã¯ããžã®è²¢ç®ãæ¡å€§ããããšèããŠããŸãã
Docker API ã®ã¢ãã«ã«å¯Ÿãã第äžçŽåžæ°æš©
OpenAI API æšæºã¯ãæ¢åã®ããŒã«ã®äžã§æããŠããã¿ã¹ãªãªãã·ã§ã³ã§ãããã Docker Engine API ã§ã¯ã¢ãã«ãæçŽåžæ°ã«ãããããšãããã£ãŠããŸãããã¢ãã«ã®å®è¡ã©ã€ããµã€ã¯ã«ã¯ãéåžžã³ã³ããã® ENTRYPOINTãæ§æããããã»ã¹ãšã¯æ ¹æ¬çã«ç°ãªããããDocker Engine API ã®æšæºã® /containers ãšã³ããã€ã³ãã«ã¯ããŸãé©åããŸããããã ããã³ã³ãããã€ã¡ãŒãžããããã¯ãŒã¯ãããªã¥ãŒã ãšåæ§ã«ãã¢ãã«ã¯åºæ¬çãªã³ã³ããŒãã³ãã§ãããããç¬èªã® API ãªãœãŒã¹ã¿ã€ãã«æ¬åœã«å€ããŸããããã«ããã/images ãšã³ããã€ã³ããå³å¯ã«ã¢ãã«ã«ããäžé£ã® /models ãšã³ããã€ã³ãã远å ããåæ©ãšãªããŸãããããã£ã¹ããªãã¥ãŒã·ã§ã³ã®ããã°èšäºã§æããã説æãããŠããçç±ããåé¢ãããŠããŸãã
GPUã¢ã¯ã»ã©ã¬ãŒã·ã§ã³
ãã 1 ã€ã®éèŠãªèšèšç®æšã¯ãæšè«æŒç®ã® GPU ã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ãµããŒãã§ãããæãå°ãããŠæçšãªã¢ãã«ã§ãããéåžžã«èšç®è² è·ãé«ããªããŸãããããæŽç·Žãããã¢ãã«(ããŒã«åŒã³åºãæ©èœãåããã¢ãã«ãªã©)ã¯ãããŒã«ã«ããŒããŠã§ã¢ã«é©åãããã®ã¯å°é£ã§ããGPUã®ãµããŒãã¯ã䟿å©ãªãšã¯ã¹ããªãšã³ã¹ã®ããã«äº€æžã®äœå°ããªããã®ã§ããã
æ®å¿µãªãããDocker Desktop ã§ VM ã®å¢çãè¶ã㊠GPU ãæž¡ãããšã¯ãç¹ã«ãã©ãããã©ãŒã éã§ä¿¡é Œæ§ãé«ããã³ã³ããå ã§äœ¿çšå¯èœãªèšç® API ãæäŸããæ¹æ³ã§ã¯ãäžå¯èœã§ããããéåžžã«äžå®å®ãªãã®ã§ããã
åŠ¥åæ¡ãšããŠãDocker Desktop VM ã®å€éšã§æšè«æäœãå®è¡ããVM ãããã¹ããžã® API åŒã³åºããåçŽã«ãããã·ããããšã«ããŸããããã®ã¢ãããŒãã«ã¯ããã€ãã®ãªã¹ã¯ããããŸãããmacOS ãš Windows ã§ã®ã³ã³ãããã¹ãåãµã³ãããã¯ã¹åã«ããããããã軜æžããåãçµã¿ã«åãçµãã§ããŸããããã«ãDocker ãæäŸããã¢ãã«ãšã¢ããªã±ãŒã·ã§ã³ãæäŸããããã³ããã䜿çšãããšãç¹ã«æšè«ãäž»ã«æ°å€æŒç®ã§æ§æãããŠããããšãèãããšããªã¹ã¯ã¯ããããäœããªããŸããDocker Desktop ã®ãªã¹ã¯ã¯ã host.docker.internal ãä»ããŠãã¹ãåŽã®ãµãŒãã¹ã«ã¢ã¯ã»ã¹ããå Žåãšã»ãŒåçã§ãããšè©äŸ¡ããŠããŸã (ããã¯ããã©ã«ãã§ãã§ã«æå¹ã«ãªã£ãŠããŸã)ã
ããããã¢ãã«åºåã§ããŒã«ã®äœ¿çšãä¿é²ãããšãŒãžã§ã³ãã¯ãããé倧ãªå¯äœçšãåŒãèµ·ããå¯èœæ§ããããããã«å¯ŸåŠããå¿ èŠããããŸããã幞ããªããšã«ã Docker MCP Toolkit ã䜿çšãããšããšãã§ã¡ã©ã« ã³ã³ããå ã§ããŒã«ã®åŒã³åºããå®è¡ã§ããã¢ãã«ãåŒãèµ·ããå¯èœæ§ã®ããå¯äœçšã確å®ã«ã«ãã»ã«åã§ããŸãããã®ãã€ããªãããªã¢ãããŒãã«ãããããŒã«ã䜿çšããéã«æ¯èŒçå®å¿ããŠãå¯èœãªéãæé«ã®ããŒã«ã«ããã©ãŒãã³ã¹ãæäŸããããšãã§ããŸãã
Docker Desktop ã®ã³ã³ããã¹ã以å€ã§ã¯ãããšãã° Docker CE ã§ã¯ããã¹ã ããŒããŠã§ã¢ãšã³ã³ããã®éã« VM å¢ç (ãã€ããŒãã€ã¶ãŒã®å Žåã¯å°ãªããšã éåžžã«éæãª VM å¢ç) ããªããããéåžžã«æå©ãªç«å Žã«ãããŸããDocker CE ã§ã¹ã¿ã³ãã¢ãã³ ã¢ãŒãã§å®è¡ãããšãDocker Model Runner ã¯ãã¹ã ããŒããŠã§ã¢ã«çŽæ¥ ( NVIDIA Container Toolkit ãªã©ãä»ããŠ) ã¢ã¯ã»ã¹ã§ããã³ã³ããå ã§æšè«æäœãå®è¡ããŸãã
ã¢ãžã¥ãŒã«æ§ãã€ãã¬ãŒã·ã§ã³ããªãŒãã³ãœãŒã¹å
åè¿°ã®ããã«ãDocker Model Runner ããŒã ã¯æ¯èŒçå°èŠæš¡ã§ãããããDocker Model Runner ã®éçºäœæ¥ã广çã«äžŠååããããã«ã¯ãã¢ããªã·ã㯠ã¢ãŒããã¯ãã£ã«é Œãããšã¯ã§ããŸããã§ãããããã«ãç§ãã¡ã¯æ©ããããå¯èœãªéããªãŒãã³ãœãŒã¹ã«ãããšããå æ¬çãªæç€ºãæã£ãŠããŸããã
ç§ãã¡ã¯ãéçºäœæ¥ãæŽçããããã® 3 ã€ã®é«ã¬ãã«ã®ã³ã³ããŒãã³ã ( ã¢ãã« ã©ã³ããŒã ã¢ãã«é åžããŒã«ã ã¢ãã« CLI ãã©ã°ã€ã³) ãæ±ºå®ããŸããã
ãããã®ã³ã³ããŒãã³ããåå²ããããšã§ãäœæ¥ããã广çã«åå²ããããè¿ éã«å埩ããç°ãªãæžå¿µäºé éã§æç¢ºãª API å¢çãå®çŸ©ããããšãã§ããŸãããäŸåé¢ä¿ã«ã¯ããã€ãã®åä»ãªããŒãã«ããããŸããã (ç¹ã«ã¯ããŒãºããœãŒã¹ã®ã³ã³ããŒãã³ããšçµ±åããå Žå)ãã¢ãžã¥ã©ãŒã¢ãããŒãã«ãããæ°ãããã©ãããã©ãŒã ã®è¿ éãªå¢å倿ŽãšãµããŒããä¿é²ãããããšãããããŸããã
é«ã¬ãã«ã®ã¢ãŒããã¯ãã£
倧ãŸãã«èšããšãDocker Model Runner ã¢ãŒããã¯ãã£ã¯ãäžèšã® 3 ã€ã®ã³ã³ããŒãã³ã (ã©ã³ããŒããã£ã¹ããªãã¥ãŒã·ã§ã³ ã³ãŒããCLI) ã§æ§æãããŠããŸãããããããã«ã¯è峿·±ããµãã³ã³ããŒãã³ããããã€ããããŸãã
å³ 1:Docker Model Runnerã®é«ã¬ãã«ã¢ãŒããã¯ãã£
ãããã®ã³ã³ããŒãã³ããã©ã®ããã«ããã±ãŒãžåããããã¹ããããã (ããã³ããããã©ã®ããã«çžäºäœçšããã) ã¯ããããã€ããããã©ãããã©ãŒã ã«ãã£ãŠãç°ãªããŸãããããã®å ŽåããèŠãç®ã¯å°ãç°ãªããŸãããã¹ãäžã§å®è¡ãããå Žåãããã°ãVM ã§å®è¡ãããå Žåãããã°ãã³ã³ãããŒã§å®è¡ãããå ŽåããããŸãããå šäœçãªã¢ãŒããã¯ãã£ã¯åãããã«èŠããŸãã
ã¢ãã« ã¹ãã¬ãŒãžãšã¯ã©ã€ã¢ã³ã
äžæ žãšãªãã¢ãŒããã¯ã㣠ã³ã³ããŒãã³ã㯠ã¢ãã« ã¹ãã¢ã§ãããã®ã³ã³ããŒãã³ãã¯ãã¢ãã«é åžã³ãŒãã«ãã£ãŠæäŸãããå®éã®ã¢ãã«ãã³ãœã«ãã¡ã€ã«ãæ ŒçŽãããå Žæã§ãããããã®ãã¡ã€ã«ã¯ã (1) é«ãšã³ããããŒã§ç¹ã«å§çž®æ§ããªãã (2) æšè«ãšã³ãžã³ã mmap() ãä»ããŠä»®æ³ã¢ãã¬ã¹ç©ºéã«ãããã³ã°ãããããªããšãããããã«ããã¡ã€ã«ã«çŽæ¥ã¢ã¯ã»ã¹ããå¿ èŠããããããç»åãšã¯ç°ãªã (ãããŠå¥ã ã«) ä¿åãããŸãã詳现ã«ã€ããŠã¯ãä»å±ã®ã¢ãã«é åžã«é¢ããããã°èšäºãåç §ããŠãã ããã
ã¢ãã«é åžã³ãŒãã¯ã ã¢ãã«é åžã¯ã©ã€ã¢ã³ããæäŸããŸãããã®ã³ã³ããŒãã³ãã¯ãOCIã¬ãžã¹ããªã«å¯ŸããŠã¢ãã«é åžãããã³ã«ã䜿çšããŠæäœ(ã¢ãã«ã®ãã«ãªã©)ãå®è¡ããŸãã
ã¢ãã«ã©ã³ããŒ
ã¢ãã« ã¹ãã¢ã®äžã«æ§ç¯ãããã®ã¯ ãã¢ãã« ã©ã³ããŒã§ããã¢ãã«ã©ã³ããŒã¯ãã€ã³ããŠã³ãæšè«APIãªã¯ãšã¹ã(äŸ:/v1/chat/completions ãŸã㯠/v1/embeddings requests) ããæšè«ãšã³ãžã³ãšã¢ãã«ã®ãã¢ããã¹ãããŠããããã»ã¹ã«éä¿¡ã§ããŸããããã«ã¯ãã¢ãã«ãåæã«ããŒãã§ããªãå Žåã§ããåæãªã¯ãšã¹ããåŠçã§ããããã«ãã¡ã¢ãªå ããã³ã¡ã¢ãªå€ãžã®ã¢ãã«ã®èªã¿èŸŒã¿ã調æŽããã¹ã±ãžã¥ãŒã©ãããŒããŒãããã³ã©ã³ããŒã³ã³ããŒãã³ããå«ãŸããŸã(äŸ:ãªãœãŒã¹ã®å¶çŽã®ãã)ãããã«ãããã¢ãã«ã®å®è¡ã©ã€ããµã€ã¯ã«ã¯ã³ã³ããã®å®è¡ã©ã€ããµã€ã¯ã«ãšã¯ç°ãªãããšã³ãžã³ãšã¢ãã«ã¯äžæçãªããã»ã¹(ã»ãšãã©ããŠãŒã¶ãŒããé ããã)ãšããŠæ©èœããå¿ èŠã«å¿ããŠ(ãŸãã¯ã¢ã€ãã«ç¶æ ã®ãšãã«)ã¡ã¢ãªããçµäºããã³ã¢ã³ããŒãã§ããŸãããšã³ãžã³ã®çµã¿åããããšã«ç°ãªãããã¯ãšã³ãããã»ã¹ãå®è¡ãããŸã (äŸ:llama.cpp)ããã³ã¢ãã«(äŸ:ai/qwen3:8B-Q4_K_M)æšè« API ãªã¯ãšã¹ãã§å¿ èŠã«å¿ã㊠(ãã ããåããã¢ã察象ãšããè€æ°ã®ãªã¯ãšã¹ãã¯ãå¯èœã§ããã°åãã©ã³ããŒãšããã¯ãšã³ã ããã»ã¹ãåå©çšããŸã)ã
ã©ã³ããŒã«ã¯ãããã¯ãšã³ãã®ãã€ããªãšã©ã€ãã©ãªãåçã«ããŠã³ããŒãã§ããã€ã³ã¹ããŒã©ãŒãµãŒãã¹ãå«ãŸããŠããããŠãŒã¶ãŒã¯æ°çŸMBã®äŸåé¢ä¿ã®ããŠã³ããŒããå¿ èŠã«ãªãå¯èœæ§ã®ããæ©èœ(CUDAãµããŒããªã©)ãéžæçã«æå¹ã«ããããšãã§ããŸãã
æåŸã«ãã¢ãã«ã©ã³ããŒã¯ã /models API (ã¢ãã«é åžã³ãŒãã«ã«ãŒãã£ã³ã°ããã) ã /engines API (ã¹ã±ãžã¥ãŒã©ãŒã«ã«ãŒãã£ã³ã°ããã) ãªã©ããã¹ãŠã® Docker Model Runner API ã®äžå€®ãµãŒããŒãšããŠæ©èœããŸãããã®APIãµãŒããŒã¯ã 503 ã¬ã¹ãã³ã¹ã®ãããªãã®ãè¿ãã®ã§ã¯ãªãããªãœãŒã¹(äž»ã«RAMãŸãã¯VRAM)ãããããåŠçããããã«äœ¿çšã§ãããŸã§ãåžžã«åŠçäžã®ãªã¯ãšã¹ããä¿æããããšãéžæããŸããããã¯ãè€æ°ã®ãšãŒãžã§ã³ããç°ãªãã¢ãã«ã§å®è¡ãããŠããå Žåããåã蟌ã¿ãšå®äºã®äž¡æ¹ã«å¯ŸããåæèŠæ±ãªã©ãå€ãã®äœ¿çšãã¿ãŒã³ã«ãšã£ãŠéèŠã§ãã
ã¢ãã«CLI
Docker Model Runner ã¢ãŒããã¯ãã£ã®äž»èŠãªãŠãŒã¶ãŒåãã³ã³ããŒãã³ãã¯ã ã¢ãã« CLI ã§ãããã®ã³ã³ããŒãã³ãã¯ã docker image ã³ãã³ããšéåžžã«ãã䌌ãã€ã³ã¿ãŒãã§ã€ã¹ãæäŸããæšæºã® Docker CLI ãã©ã°ã€ã³ ã§ããã¢ãã«å®è¡ã®ã©ã€ããµã€ã¯ã«ã¯ã³ã³ããã®ã©ã€ããµã€ã¯ã«ãšã¯ç°ãªããŸãããæŠå¿µ(ããã·ã¥ããã«ãå®è¡ãªã©)ã¯ãæ¢åã®DockerãŠãŒã¶ãŒã«ãšã£ãŠååã«éŠŽæã¿æ·±ããã®ã§ãªããã°ãªããŸããã
ã¢ãã« CLI ã¯ãã¢ãã« ã©ã³ããŒã® API ãšéä¿¡ããŠãã»ãŒãã¹ãŠã®æäœãå®è¡ããŸã (ãã ãããã®éä¿¡ã®ãã©ã³ã¹ããŒãã¯ãã©ãããã©ãŒã ã«ãã£ãŠç°ãªããŸã)ãã¢ãã« CLI ã¯ã³ã³ããã¹ã察å¿ã§ãããããDocker Desktop ã¢ãã«ã©ã³ããŒãDocker CE ã¢ãã«ã©ã³ããŒããŸãã¯ã«ã¹ã¿ã ãã©ãããã©ãŒã äžã®ã¢ãã«ã©ã³ããŒãšéä¿¡ããŠãããã©ããã倿ã§ããŸããæšæºã®Docker CLIãã©ã°ã€ã³ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠãããããæšæºã® Docker Context æ©èœããã¹ãŠç¡æã§å©çšã§ãããã®æ€åºãã¯ããã«å®¹æã«ãªããŸãã
APIã®èšèšãšã«ãŒãã£ã³ã°
åè¿°ã®ããã«ãDocker Model Runner ã¯ãDocker ã¹ã¿ã€ã«ã® API ãš OpenAI äºæã® API ã® 2 ã€ã® API ã»ããã§æ§æãããŠããŸããDocker ã¹ã¿ã€ã«ã® API ( /image API ãã¢ãã«ã«ããŠããŸã) ã«ã¯ã次ã®ãšã³ããã€ã³ããå«ãŸããŸãã
- POST /models/create (ã¢ãã«ã®ãã«)
- GET /models (ã¢ãã«äžèЧ)
- GET /models/{namespace}/{name} (ã¢ãã«ã¡ã¿ããŒã¿)
- DELETE /models/{namespace}/{name} (ã¢ãã«ã®åé€)
ãããã®ãªã¯ãšã¹ãã®æ¬æã¯ãç»åã®é¡äŒŒç©ãšéåžžã«ãã䌌ãŠããŸããçŸæç¹ã§ã¯ããã¥ã¡ã³ãã¯ãããŸãããã 察å¿ããGoã¿ã€ããèŠãããšã§ã圢åŒãå£éèŠãããšãã§ããŸãã
å¯Ÿç §çã«ãOpenAI ãšã³ããã€ã³ãã¯ãç°ãªãã RESTful ãªèŠåã«åŸããŸãã
- GET /engines/{engine}/v1/models (OpenAI圢åŒã®ã¢ãã«ãªã¹ã)
- GET /engines/{engine}/v1/models/{namespace}/{name} (OpenAI 圢åŒã®ã¢ãã«ã¡ã¿ããŒã¿)
- POST /engines/{engine}/v1/chat/completions (ãã£ããã®å®äº)
- POST /engines/{engine}/v1/completions (ãã£ããã®å®äº (ã¬ã¬ã·ãŒ ãšã³ããã€ã³ã))
- POST /engines/{engine}/v1/embeddings (åã蟌ã¿ãäœæãã)
çŸæç¹ã§ã¯ããµããŒããããŠãã {engine} å€ã¯ 1 ã€ã ãã§ã (llama.cpp)ããŸããããã©ã«ã(llama.cpp)ã®äœ¿çšãçç¥ããããšãã§ããŸããšã³ãžã³ã
ãããã® API ã¯ãããã€ãã®ç°ãªããšã³ããã€ã³ãã§äœ¿çšã§ããããã«ããŸãã
ãŸããDocker Desktop ã§ã¯ãDocker ãœã±ãã (/var/run/docker.sock) ã§äœ¿çšã§ããŸããã³ã³ããã®å
åŽãšå€åŽã®äž¡æ¹ãããã¯ãDocker Engine API ã§ã¢ãã«ã第äžçŽåžæ°ãšããŠæã€ãšããèšèšç®æšã«ãµãŒãã¹ãæäŸãããã®ã§ããçŸæç¹ã§ã¯ããããã®ãšã³ããã€ã³ãã®å
é ã«ã¯ /exp/vDD4ãä»ããããŠããŸã40path (éçºäžã«é²åããå¯èœæ§ã®ãã API ãžã®äŸåãé¿ãããã) ã§ããããããã® API ã¯çŸåšã»ãšãã©å®å®ããŠãããäžäœäºææ§ã®ããæ¹æ³ã§é²åãããããæ¬¡ã®ããã€ãã®ãªãªãŒã¹ã§ãã®ãã¬ãã£ãã¯ã¹ãåé€ããå¯èœæ§ããããŸãã
次ã«ãDocker Desktop ã§ããã³ã³ããããã®ã¿ã¢ã¯ã»ã¹å¯èœãªç¹å¥ãª model-runner.docker.internal ãšã³ããã€ã³ãã§ API ãå©çšã§ããããã«ããŸã (ãã ããæšè«ãµã³ãããã¯ã¹ãæåã«å®è£ ããããããçŸåšã¯ ECI ã³ã³ããããã§ã¯ãããŸãã)ããã® TCP ããŒã¹ã®ãšã³ããã€ã³ãã¯ã(Docker API å šäœã§ã¯ãªã) /models API ãšã³ããã€ã³ããš /engines API ãšã³ããã€ã³ãã®ã¿ãå ¬éããæ¢åã®ããŒã« (Unix ãã¡ã€ã³ ãœã±ããçµç±ã§ API ã«ã¢ã¯ã»ã¹ã§ããªãå¯èœæ§ãé«ã) ãæäŸããããã«èšèšãããŠããŸãã/exp/vDD4ããããŸããã40ãã®å Žåããã¬ãã£ãã¯ã¹ã䜿çšãããŸãã
æåŸã«ãDocker Desktop ãš Docker CE ã®äž¡æ¹ã§ã/models API ãšã³ããã€ã³ããš /engines API ãšã³ããã€ã³ãããã¹ã TCP ãšã³ããã€ã³ã (localhost:12434ã§ãããã©ã«ãã§ /exp/vDD4 ãªãã§äœ¿çšã§ããããã«ããŸã40ãã¬ãã£ãã¯ã¹)ãDocker Desktop ã§ã¯ãããã¯ãªãã·ã§ã³ã§ãããããã©ã«ãã§ã¯æå¹ã«ãªã£ãŠããŸãããDocker CE ã§ã¯ãAPI ãšã³ããã€ã³ããžã®ã¢ã¯ã»ã¹æ¹æ³ã®éèŠãªã³ã³ããŒãã³ãã§ãããçŸåšãDocker CE ã® /var/run/docker.sock ã«ãšã³ããã€ã³ãã远å ããããã«ã¹ã¿ã ã® model-runner.docker.internal ãã¹ãåãæ¿å ¥ãããããããã®çµ±åããªããããæšæºã® 172.17.0.1 ã䜿çšããããšããå§ãããŸãããã® localhost ã«å ¬éãããŠããããŒãã«ã¢ã¯ã»ã¹ããããã®ãã¹ã ã²ãŒããŠã§ã€ ã¢ãã¬ã¹ (äŸ:OpenAI API ã®ããŒã¹ URL ã http://172.17.0.1:12434/engines/v1) ã«èšå®ããŸããè¿ãå°æ¥ããããDockerãã©ãããã©ãŒã éã§çµ±åã§ããããã«ãªãããšãé¡ã£ãŠããŸã(以äžã®ããŒãããããåç §)ã
ãŸãã¯ãDocker Desktop
Docker Model Runner ã®èªç¶ãªæåã®ã¹ãããã¯ãDocker Desktop ãžã®çµ±åã§ãããDocker Desktop ã§ã¯ãDocker ãšã³ãžã³ãšã®çµ±åããã¢ãã«ã©ã³ããŒã³ã³ããŒãã³ãã®ãã¹ãã«äœ¿çšã§ããæ¢åã®ããã»ã¹ãããçŽæ¥çã«å¶åŸ¡ã§ããŸãããã®å Žåãã¢ãã«ã©ã³ããŒãšã¢ãã«é åžã³ã³ããŒãã³ãã¯Docker Desktopãã¹ãããã¯ãšã³ãããã»ã¹( com.docker.backend ããã»ã¹ãå®è¡ãããŠããã®ãèŠãããšããããããããŸãã)ã«ååšããç¹å¥ãªããã«ãŠã§ã¢ãšãããã¯ãŒãã³ã°ããžãã¯ã䜿çšã㊠ã/var/run/docker.sock ãš model-runner.docker.internal äžã®ãªã¯ãšã¹ããã¢ãã«ã©ã³ããŒã®APIãµãŒããŒã«ã«ãŒãã£ã³ã°ããŸããåã ã®æšè«ããã¯ãšã³ãããã»ã¹ã¯ com.docker.backend ã®ãµãããã»ã¹ãšããŠå®è¡ããããããããšãã°ãæšè«ããã¯ãšã³ããã¡ã¢ãªäžè¶³ (OOM) ãšã©ãŒã«ãã£ãŠåŒ·å¶çµäºãããå ŽåãDocker Desktop ã§ã¯ã©ãã·ã¥ãããªã¹ã¯ã¯ãããŸããã
åœåã¯ãã¢ãã«ã©ã³ããŒæ©èœãéçºããããã®æãçµ±äžããããã©ãããã©ãŒã ãæäŸãã Apple Silicon äžã® macOS ã®ãµããŒãããå§ããŸãããããã¹ãŠã® Docker Desktop ãã©ãããã©ãŒã åãã«ãã«ããšãã¹ããè¡ãéäžã§ã»ãšãã©ã®æ©èœãå®è£ ããŸãããããã«ãããAMD64 ããã³ ARM64 ãã©ãããã©ãŒã äžã® Windows ãžã®ç§»æ€ãå€§å¹ ã«å®¹æã«ãªããããã§èŠã€ãã£ã GPU ã®ããªãšãŒã·ã§ã³ã䜿çšã§ããããã«ãªããŸããã
Windows ã§åé¡ã«ãªã£ãã®ã¯ãGPU ããŒã¹ã®ããã¯ãšã³ãã®ãµããŒãã©ã€ãã©ãªã®äŸåé¢ä¿ã®ãµã€ãºã倧ããããšã§ãããDocker Desktop for Windowsã€ã³ã¹ããŒã©ãŒã«ããã« 500 MBã 1 GBã远å ããŠãå®çŸäžå¯èœ(ãŸãã¯èš±å®¹)ã§ã¯ãªãã£ããããDocker Desktop for Windowsã®CPUããŒã¹ã®ããã¯ãšã³ããããã©ã«ãã«ãããªãã·ã§ã³ã§GPUããã¯ãšã³ãããµããŒãããããšã«ããŸãããããããã¢ãã«ã©ã³ããŒã®åçã€ã³ã¹ããŒã©ãŒã³ã³ããŒãã³ãã®äž»ãªåæ©ä»ãã§ãã(ããã«ãããŸããŸãªããã¯ãšã³ããžã®å¢åæŽæ°ãæãã§ããŸãã)ã
ããã¯ãã¹ãŠéåžžã«ããèšç»ãããæŒç¿ã®ããã«èãããå®éã3ã€ã®ã³ã³ããŒãã³ãèšèšãšå³å¯ã«åŒ·å¶ãããAPIå¢çããå§ããŸããããå®éã«ã¯ãDocker DesktopãœãŒã¹ã³ãŒãã®ãµãããã±ãŒãžãšããŠã¢ãã«ã©ã³ããŒãµãŒãã¹ã³ãŒãããå§ããŸãããããã«ãããç¹ã«ããŸããŸãªãµãŒãã¹ã®ã¢ãŒããã¯ãã£ãæ¢æ±ããéã«ãè¿ éãªã€ãã¬ãŒã·ã§ã³ãã¯ããã«å®¹æã«ãªããŸããã幞ããªããšã«ãã³ãŒãã«å¯ŸããŠæ¯èŒç峿 Œãªåé¢ããªã·ãŒãå æããAPI ãšã€ã³ã¿ãŒãã§ã€ã¹ãéããŠã¯ãªãŒã³ãªäŸåé¢ä¿ã匷å¶ããããšã§ããªãŒãã³ãœãŒã¹åã®ç®çã§ã³ãŒã (åªãã git-filter-repo ããŒã«ã«ç§°è³ãéããŸã) ãå¥ã®ãªããžããªã«ç°¡åã«æœåºããããšãã§ããŸããã
次ã®ç®çå°:Docker CE
Docker ã®ãªãŒãã³ãœãŒã¹åãžã®ãã ããã¯å¥ãšããŠãDocker Model Runner ã®ãœãŒã¹ã³ãŒããå ¬éããããšèããäž»ãªçç±ã® 1 ã€ã¯ãDocker CE ãžã®çµ±åããµããŒãããããšã§ãããç§ãã¡ã®ç®æšã¯ãdocker buildx ã docker compose ãšåãæ¹æ³ã§ docker model ã³ãã³ããããã±ãŒãžåããããšã§ããã
Docker CE ã®ç§èš£ã¯ãDocker Model Runner ããããã©ãã® Docker CLI ãã©ã°ã€ã³ (ã€ãŸããç¹å¥ãªæš©éãAPIã¢ã¯ã»ã¹ããªã)ãã€ãŸããã¢ãã«ã©ã³ããŒãµãŒãã¹ããã¹ãã§ããããã¯ãšã³ãããã»ã¹ããªãã£ãã®ã§ãããã ããDocker CE ã®å Žåããã¹ã ããŒããŠã§ã¢ãšã³ã³ãã ããã»ã¹ã®éã®å¢çã¯äžæãã¯ããã«å°ãªããããå®éã«ã¯ã³ã³ããå ã§ Docker Model Runner ãå®è¡ããã¢ã¯ã»ã©ã¬ãŒã¿ ããŒããŠã§ã¢ãçŽæ¥å©çšã§ããããã«ããããšãã§ããŸãããã®ãããã¹ã¿ã³ãã¢ãã³ã® BuildKit ãã«ããŒã³ã³ãããšåæ§ã«ãDocker Model Runner ã Docker CE ã®ã¹ã¿ã³ãã¢ãã³ã³ã³ãããšããŠå®è¡ããã¢ãã«ã¹ãã¬ãŒãžçšã«ç¹å¥ãªååã®ããªã¥ãŒã ã䜿çšããŸã (ã€ãŸããã¢ãã«ãåãã«ããã«ã©ã³ããŒãã¢ã³ã€ã³ã¹ããŒã«ã§ããŸã)ããã®ãã€ã³ã¹ããŒã«ãã¯ã docker/model-runner ã€ã¡ãŒãžããã«ããŠã³ã³ãããèµ·åããããšã«ãããã¢ãã« CLI ã«ãã£ãŠèªåçã« (å¿ èŠã«å¿ããŠ) å®è¡ãããŸããã©ã³ããŒã®æç€ºçãªèšå®ã¯ã docker model install-runner ã³ãã³ãã䜿çšããŠæå®ããããšãã§ããŸããå¿ èŠã«å¿ããŠã docker model uninstall-runner ã䜿çšããŠã¢ãã«ã©ã³ã㌠(ããã³ãªãã·ã§ã³ã§ã¢ãã«ã¹ãã¬ãŒãž) ãåé€ããããšãã§ããŸãã
æ®å¿µãªãããããã¯UXãšã®å°ããªåŠ¥åç¹ã®1ã€ã«ã€ãªãããŸã:çŸåšã /var/run/docker.sock ãŸãã¯ç¹å¥ãª model-runner.docker.internalURL ã§ã¢ãã«ã©ã³ããŒAPIããµããŒãããŠããŸããã代ããã«ãã¢ãã«ã©ã³ã㌠API ãµãŒããŒã¯ããã¹ãã·ã¹ãã ã®ã«ãŒãããã¯ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã localhost: ã® lamp:12434 (ããã©ã«ã) ããªãã¹ã³ããŸããããã¯ãã»ãšãã©ã®ã³ã³ããå ã§ 172. . .17.0.1:12434.å¿ èŠã«å¿ããŠããŠãŒã¶ãŒã¯ãããmodel-runner.docker.internalã§å©çšã§ããããã«ããããšãã§ããŸã12434âadd-host=model-runner.docker.internal:host-gateway ã®ãããªãã®ãå©çšããdocker run ãŸã㯠docker create ã³ãã³ããå®è¡ããå Žåãããã¯ãCompose YAML ãã¡ã€ã«ã§ extra_hosts ããŒã䜿çšããŠãå®çŸã§ããŸããä»åŸã®ãªãªãŒã¹ã§ã¯ãããããã人éå·¥åŠã«åºã¥ãããã®ã«ããäºå®ã§ãã
ããããã®é...
çŸç¶ã¯ãmacOSããã³Windowsã®Docker Desktopã§ã®Docker Model Runnerã®ãµããŒããšãLinux(WSL2ãå«ã)ã§ã®Docker CEã®ãµããŒãã§ãããããã§è©±ãçµããããã§ã¯ãããŸãããä»åŸæ°ãæã®éã«ãDocker Model Runner ã®ãŠãŒã¶ãŒ ãšã¯ã¹ããªãšã³ã¹ãããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ãåæ§ç¯ãããšæãããããã€ãã®ã€ãã·ã¢ãããèšç»ããŠããŸãã
远å ã®GUIããã³CLIæ©èœ
ä»åŸæ°ãæã®éã«ç»å Žããæãç®ç«ã€æ©èœã¯ãã¢ãã«CLIãšDocker Desktopããã·ã¥ããŒãã®[ã¢ãã«]ã¿ãã§ããã¢ãã«ã®å®è¡ã®ç£èŠãšå¶åŸ¡ãããçŽæ¥çã«ãµããŒãããæ°ããã³ãã³ã ( dfã psã unload ãªã©) ãç»å Žããäºå®ã§ãããŸãã[ã¢ãã«] ã¿ãã«ã¯ãæ°ããã¬ã€ã¢ãŠããšæ¡åŒµãããã¬ã€ã¢ãŠããšæ©èœã衚瀺ãããŸãã
OpenAI API ãµããŒãã®æ¡åŒµ
Docker Model Runner ã®ãŠãŒã¶ãŒ ãšã¯ã¹ããªãšã³ã¹ã§ããŸãç®ç«ããªãããåæ§ã«éèŠãªåŽé¢ã¯ãOpenAI API ãšã®äºææ§ã§ãããµããŒããããšã³ããã€ã³ããšãã©ã¡ãŒã¿ã¯å€æ°ãããŸã(ãã§ã«å€ãã®ãã©ã¡ãŒã¿ããµããŒãããŠããŸã)ãããå®éã®ãŠãŒã¹ã±ãŒã¹ã«çŠç¹ãåœãŠãæ¢åã®ããŒã«ãšã®äºææ§ãåªå ããŠãAPIãµãŒãã§ã¹ã®äºææ§ã®æ¡å€§ã«åãçµã¿ãŸãã
containerdãšMobyã®çµ±å
ç§ãã¡ãæ€èšããŠããé·æçãªåãçµã¿ã®1ã€ã¯ã containerdãšã®çµ±åã§ããcontainerdã¯ãã¹ãã¬ãŒãžãšèª¿æŽãããã¿ã¹ã¯å®è¡ãå¯èœã«ããã¢ãžã¥ã©ãŒã©ã³ã¿ã€ã ã·ã¹ãã ããã§ã«æäŸããŠããŸããç§ãã¡ã¯ããããæ£ããæ¹æ³ã§ãããã¢ãã«ã®ä¿åãã¢ãã«ã®å®è¡ãããã³ã¢ãã«ã®å®è¡ãµã³ãããã¯ã¹ã®é¢ä¿ãããé©åã«äœç³»åã§ãããšä¿¡ããŠããŸãã
containerdã®äœæ¥ãšçµã¿åãããŠãMobyãããžã§ã¯ããšã®ããç·å¯ãªçµ±åãæãã§ããŸããæ¢åã®Docker CEçµ±åã¯å®è¡å¯èœã§ããã©ãŒãã³ã¹ã®é«ããœãªã¥ãŒã·ã§ã³ãæäŸããŸãããããçŽæ¥çãªçµ±åã«ãããããåªãã人éå·¥åŠãå®çŸã§ãããšèããŠããŸããç¹ã«ãDocker CE ã§ã® model-runner.docker.internal DNS 解決ã®ãµããŒããªã©ã®åªããç¹ã泚ç®ãããŠããŸããããããããã®ç·å¯ãªçµ±åã«ããæå€§ã®å©ç¹ã¯ãDocker Model Runner API ã Docker ãœã±ããã«å ¬éããAPI ãšã³ããã€ã³ã (äŸ:/models)Docker Engine API ã®å ¬åŒããã¥ã¡ã³ããåç §ããŠãã ããã
Kubernetes
Docker Model Runnerã®è£œåç®æšã®1ã€ã¯ãéçºã®å éšã«ãŒãããæ¬çªç°å¢ãŸã§äžè²«ãããšã¯ã¹ããªãšã³ã¹ãå®çŸããããšã§ãããKubernetesã¯ééããªããã®éã®äžéšã§ããDocker CE ã«äœ¿çšããŠããæ¢åã® Docker Model Runner ã€ã¡ãŒãžã¯ãKubernetes ã¯ã©ã¹ã¿ãŒå ã§ãæ©èœããçŸåšãKubernetes ã¯ã©ã¹ã¿ãŒã§ Docker Model Runner ã€ã³ã¹ã¿ã³ã¹ãèšå®ããæé ãéçºããŠããŸããKubernetesãšã®å€§ããªéãã¯ã䜿çšãããŠããã¯ã©ã¹ã¿ãŒãšã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã倿§ã§ããããšã§ãããããããŸããŸãªã·ããªãªã§Docker Model Runnerãæ§æããæ¹æ³ã«ã€ããŠãããŸããŸãªãã¬ã·ãããå¿ èŠã«ãªãå¯èœæ§ããããŸãã
vLLMã®
å€ãã®ã客æ§ããå¯ãããã声㮠1 ã€ã¯ãvLLM ããããã¯ã·ã§ã³ ã¹ã¿ãã¯ã®äžæ žã³ã³ããŒãã³ãã§ãããšããããšã§ããããã¯ãã¢ãã«ã©ã³ããŒãªããžããªã«ã¹ã¿ãã¢ãŠãããæåã®ä»£æ¿ããã¯ãšã³ãã§ããããå®è£ ãçªã£èŸŒã¿å§ããæãæ¥ãŸããã
ããã«å¢ãã...
æåŸã«ããŸã ã話ãã§ããªãéšåããããŸããããããã¯éçºè ãã¢ãã«ãšå¯Ÿè©±ããæ¹æ³ãæ ¹æ¬çã«å€ããã§ãããã7 æ 9æ¥ãã11 æ¥ãŸã§éå¬ããã WeAreDevelopers ã® Docker ã®ã»ãã·ã§ã³ã§ã¯ãDocker ã® AI é¢é£ã®åãçµã¿ã«é¢ãããšããµã€ãã£ã³ã°ãªçºè¡šãã芧ããã ããŸãã
ããã«è©³ãã
- ã¢ãã«åæ£ä»æ§ã®èåŸã«ãã ã¹ããŒãªãŒ ãã芧ãã ãã
- Docker Model Runner ã®ã¯ã€ãã¯ã¹ã¿ãŒãã¬ã€ãããèªã¿ãã ããã
- Model Runner ã®ããã¥ã¡ã³ããèŠã€ãããŸãã
- Docker Navigator ãã¥ãŒã¹ã¬ã¿ãŒã賌èªããŠãã ããã
- Docker ã¯åããŠã§ãã? ã¢ã«ãŠã³ããäœæããŸããÂ
- 質åããããŸãã? Docker ã³ãã¥ããã£ããæäŒãããŸãã