
ããŒã«ã«LLMãNPUã§é«éåïŒNexa SDKãã³ãããŒã¯çµæ
ããã«ã¡ã¯ïŒYaroTechã§ãã
æšæ¥ãNPUæèŒPCã§ããŒã«ã«LLMïŒAIïŒãéžã¶æ¹æ³ãã玹ä»ããŸããã仿¥ã¯ãå®éã«NPUã§AIãåãããŠãã©ããããéããªã£ãã®ã枬å®ããçµæãã·ã§ã¢ããŸãïŒ
ãNPUã£ãŠäœïŒãããã³ãããŒã¯ã£ãŠäœã®è©±ïŒããšããæ¹ã倧äžå€«ãã§ããã ããããããããå°éçšèªãé¿ããŠèª¬æããŠãããŸããã
â»èŠåºãç»åã®ããã³ããã¯äžçªäžã«ããŸãã§å ¬éäžïŒ
ð¥ïž å®è¡ç°å¢
PC: Surface Laptop 7th Edition
CPU: Snapdragon X EliteïŒNPUæèŒïŒ
ã¡ã¢ãª: 16GB
OS: Windows 11 Pro 24H2ïŒARM64çïŒ
䜿çšããŒã«: Nexa SDK 1.0.24ãPython 3.12.10
AIã¢ãã«: Llama 3.2ïŒ30åãã©ã¡ãŒã¿çïŒ
ð¯ ãã®èšäºã§åŸãããããš
NPUã§AIãåããå ·äœçãªæé ãããã
å®éã®é床ããŒã¿ïŒ23.91 tok/sïŒã®æå³ãçè§£ã§ãã
ãšã©ãŒãåºãæã®å¯ŸåŠæ³ãããã
åå¿è ã§ãç䌌ã§ããç°å¢æ§ç¯æé ãç¿åŸã§ãã
ð ããããNPUã£ãŠäœïŒ
NPU = AIãåããå°éã®éšå
ããœã³ã³ã«ã¯è²ã ãªéšåãå ¥ã£ãŠããŸããããCPUã¯èšç®å šè¬ãæ åœãGPUã¯ç»ååŠçãæ åœ...ãšããæãã§ãããããåŸæåéããããŸãã
NPUïŒNeural Processing UnitïŒã¯ãAIåŠçå°éã®éšåã§ãã
äŸãããªãïŒ
CPU = äœã§ãã§ããäžèœéžæïŒã§ãå°éå€ã¯å°ãé ãïŒ
GPU = ç»ååŠçã®ã¹ãã·ã£ãªã¹ãïŒAIãã§ãããã©æ¬æ¥ã¯å¥ïŒ
NPU = AIåŠçã®ãããã§ãã·ã§ãã«ïŒAIå°éã ããè¶ éãïŒ
æè¿ã®ããŒãPCã«ã¯ããã®NPUãæèŒãããŠãããã®ãå¢ããŠããŸãããç§ã®Surface Laptopã«ãå ¥ã£ãŠããŸãã
ð§ ç°å¢æ§ç¯æé ïŒèª°ã§ãåçŸå¯èœïŒ
ã¹ããã1: å¿ èŠãªããŒã«ãã€ã³ã¹ããŒã«
ãŸããPythonãšãããããã°ã©ã ãåããããã®éå ·ããã€ã³ã¹ããŒã«ããŸãããã§ã«å ¥ã£ãŠããæ¹ã¯é£ã°ããŠOKã§ãã
Python 3.12.10ãããŠã³ããŒãïŒå ¬åŒãµã€ãããïŒ
ã€ã³ã¹ããŒã«æã«ãAdd to PATHãã«ãã§ãã¯
ã³ãã³ãããã³ãããéããŠç¢ºèªïŒ`python --version`
ã¹ããã2: Nexa SDKãã€ã³ã¹ããŒã«
Nexa SDKã¯ãNPUãç°¡åã«äœ¿ããããã«ããŠãããããŒã«ãã§ãã
pip install nexaaiããã ãïŒãã£ã1è¡ã§å®äºããŸãã
ã¹ããã3: èªèšŒããŒãååŸ
Nexa SDKã䜿ãã«ã¯ãç¡æã®ãèªèšŒããŒããå¿ èŠã§ããããã¯ã峿žé€šã®å©çšã«ãŒããã®ãããªãã®ã§ãã
Nexaå ¬åŒãµã€ãã§ã¢ã«ãŠã³ãäœæïŒç¡æïŒ
ãã€ããŒãžã§TokenãäœæããŠãèªèšŒããŒïŒValueïŒãã³ããŒ
ã³ãã³ãããã³ããã§èšå®ïŒ
setx NEXA_TOKEN "ããã«èªèšŒããŒã貌ãä»ã"
setx NEXA_API_KEY "åãããŒãããäžåºŠè²Œãä»ã"

éèŠ: ã³ãã³ãããã³ãããäžåºŠéããŠãéãçŽããŠãã ãããããã§èšå®ãåæ ãããŸãã
ã¹ããã4: åäœç¢ºèª
ç°¡åãªãã¹ãã¹ã¯ãªããã§åãã確èªããŸãããã
from nexaai import LLM
# NPUçšã®AIã¢ãã«ãèªã¿èŸŒã
llm = LLM.from_("NexaAI/llama3.2-3B-NPU-Turbo", plugin_id="npu")
# ãã¹ã質å
response = llm.generate("What is the capital of Japan?")
print(response) # â "Tokyo." ãšè¿ã£ãŠããã°æåïŒããã§ãTokyo.ããšè¡šç€ºãããããNPUã§AIãåããŠããŸãïŒ
ð ãã³ãããŒã¯çµæã®è©³çް
æž¬å®æ¹æ³
5ã€ã®è³ªåãAIã«æããŠãåŠçéåºŠãæž¬å®ããŸããã
質åå 容:
ãæ¥æ¬ã®éŠéœã¯ïŒãïŒçæïŒ
ãAIããããããã説æããŠãïŒäžæïŒ
ãçµµãæãããããã®ç©èªãæžããŠãïŒé·æã»åµäœïŒ
ãåçå¯èœãšãã«ã®ãŒã®ã¡ãªããã¯ïŒãïŒé·æã»èª¬æïŒ
ãæ°Žã®åŸªç°ã«ã€ããŠæããŠãïŒé·æã»è©³çŽ°èª¬æïŒ
çµæããŒã¿
| ãã¹ã | åŠçæé | æåæ° | é床 |
|--------|----------|--------|------|
| ãã¹ã1 | 0.2ç§ | 1èª | 6.49 tok/s |
| ãã¹ã2 | 6.1ç§ | 182èª | 29.78 tok/s |
| ãã¹ã3 | 14.0ç§ | 355èª | 25.31 tok/s |
| ãã¹ã4 | 12.0ç§ | 320èª | 26.63 tok/s |
| ãã¹ã5 | 19.1ç§ | 372èª | 19.49 tok/s |
å¹³åé床: 23.91 tok/s

tok/s ã£ãŠäœïŒ
tok/sïŒtokens per secondïŒ= 1ç§ãããã«åŠçã§ããåèªæ°
äŸãã°ã23.91 tok/sãšããããšã¯ã1ç§éã«çŽ24åã®åèªãçæã§ãããšããæå³ã§ãã
æ®éã®äººã話ãã¹ããŒãã¯çŽ2-3èª/ç§ãªã®ã§ãAIã¯äººéã®çŽ8åã®éãã§æç« ãäœã£ãŠããèšç®ã«ãªããŸãã
è©äŸ¡åºæº
Nexa SDKã®è©äŸ¡åºæºã§ã¯ïŒ
Aè©äŸ¡: 25 tok/s以äž
Bè©äŸ¡: 15-25 tok/s
Cè©äŸ¡: 15 tok/sæªæº
ä»åã®çµæã¯23.91 tok/s = Bè©äŸ¡ã§ããïŒ
Aè©äŸ¡ãŸã§ããš1.09 tok/sïŒçŽ4%ïŒãªã®ã§ãããªãè¯ãçµæã§ãã
ð¡ ããã©ãŒãã³ã¹åæã»èå¯
ãªããã¹ãã«ãã£ãŠé床ãéãã®ïŒ
çæïŒãã¹ã1ïŒãé ãã£ãçç±
æåã®è³ªåã§ã¯é床ã6.49 tok/sãšé ãã£ãã§ãããããã¯ãæºåéåãã¿ãããªãã®ãAIãèµ·åããŠæºåããæéãå«ãŸããŠããŸãã
äŸãããªãïŒ
è»ã®ãšã³ãžã³ããããçŽåŸã¯é ã
æž©ãŸã£ãŠãããšæ¬æ¥ã®ã¹ããŒããåºã
AIãåãã§ã2åç®ä»¥éã¯æ¬æ¥ã®é床ïŒ25-30 tok/sïŒãåºãŠããŸãã
é·æã§ãéãçç±
ãã¹ã2-4ã§ã¯25-30 tok/sãšããé«éåŠçãã§ããŸãããããã¯NPUã®åŸæåéã§ãã
NPUã¯ãé£ç¶ããåŠçãäžæ°ã«ãããã®ãåŸæãªã®ã§ãé·ãæç« ãäœãã»ã©å¹çãè¯ããªããŸãã
è¶ é·æã§å°ãé ããªã£ãçç±
ãã¹ã5ïŒ372èªã®è¶ é·æïŒã§ã¯19.49 tok/sã«èœã¡ãŸãããããã¯ïŒ
ã¡ã¢ãªïŒèšæ¶é åïŒãè¶³ããªããªã£ãŠãã
åŠçããæ å ±éãå€ããã
ãšããã®ãåå ã§ãã
ã§ãã19.49 tok/sã§ã人éã®çŽ6.5åã®ã¹ããŒããªã®ã§ãå®çšäžã¯å šãåé¡ãããŸããã
NPUã䜿ã䟡å€ã¯ããã®ïŒ
çµè«: ãã¡ããã¡ããããŸãïŒ
NPUãªãã§CPUã ãã§åãããšãé床ã¯çŽ5-10 tok/sããããã€ãŸããNPUã䜿ãããšã§2-3åéããªã£ãŠããããã§ãã
ã¯ã©ãŠãAIïŒChatGPTãªã©ïŒãšæ¯ã¹ãŠãïŒ
é床: ã»ãŒåç
ã³ã¹ã: å®å šç¡æïŒé»æ°ä»£ã®ã¿ïŒ
ãã©ã€ãã·ãŒ: å®ç§ïŒããŒã¿ãå€ã«åºãªãïŒ
ãšããäžæåãæã£ãŠããŸãã
â ïž ãã©ãã«ã·ã¥ãŒãã£ã³ã°
å®éã«è©ŠããŠããŠãããã€ããšã©ãŒã«ééããŸãããåãåé¡ã«çŽé¢ããæ¹ã®ããã«ãè§£æ±ºæ¹æ³ããŸãšããŸãã
ãšã©ãŒ1: ãçµµæåã衚瀺ã§ããŸããã
çç¶:
UnicodeEncodeError: 'cp932' codec can't encode characteråå : Windowsæ¥æ¬èªç°å¢ã§ã¯çµµæåã䜿ããªã
è§£æ±ºæ¹æ³: ã¹ã¯ãªããå ã®çµµæåãåé€
# â ãããããšåããªã
print("ð ãã¹ãéå§")
# â
ãããããšåã
print("[START] ãã¹ãéå§")çµµæåã®ä»£ããã« `[OK]`ã`[ERROR]`ã`[INFO]` ãªã©ã®èšå·ã䜿ãã°åããŸãã
ãšã©ãŒ2: ãç°å¢å€æ°ãèŠã€ãããŸããã
çç¶:
NEXA_TOKEN not foundåå : ç°å¢å€æ°ã®èšå®åŸãã³ãã³ãããã³ãããåèµ·åããŠããªã
è§£æ±ºæ¹æ³:
ã³ãã³ãããã³ãããäžåºŠéãã
æ°ããã³ãã³ãããã³ãããéã
確èª: `echo %NEXA_TOKEN%`ïŒPowerShellã®å Žå㯠`echo $env:NEXA_TOKEN`ïŒ
ãšã©ãŒ3: ãã¢ãã«ãäœæã§ããŸããã
çç¶:
Failed to create llm: Invalid input parametersåå : è€éãªé¢æ°æ§é ã§ãšã©ãŒãçºç
è§£æ±ºæ¹æ³: ã·ã³ãã«ãªæ§é ã«æžãçŽã
# â è€éãªé¢æ°åŒã³åºãã¯é¿ãã
def benchmark_inference(plugin_id):
llm = LLM.from_("...", plugin_id=plugin_id)
# ...
# â
ã·ã³ãã«ã«çŽæ¥æžã
llm = LLM.from_("NexaAI/llama3.2-3B-NPU-Turbo", plugin_id="npu")
response = llm.generate("質å")ãšã©ãŒ4: ãåŠçãéäžã§æ¢ãŸãã
çç¶: å®è¡äžã«äœã衚瀺ãããªããªã
åå : å®ã¯æ¢ãŸã£ãŠããªããåŠçã«æéãããã£ãŠããã ã
è§£æ±ºæ¹æ³:
ãã®ãŸãŸåŸ ã€ïŒé·æçæã¯10-20ç§ãããïŒ
åŠçç¶æ³ã衚瀺ããã³ãŒãã远å
print("åŠçäž...")
response = llm.generate("質å")
print("å®äºïŒ")ãã©ãã«åé¿ã®ã³ã
å°ããã€è©Šã: ãããªãè€éãªããšãããããŸãç°¡åãªè³ªåã§åäœç¢ºèª
ãšã©ãŒã¡ãã»ãŒãžãã³ããŒ: Googleæ€çŽ¢ã§è§£æ±ºçãèŠã€ãã
ã³ãã³ãããã³ãããåèµ·å: èšå®å€æŽåŸã¯å¿ ãåèµ·å
ã·ã³ãã«ã«æžã: è€éãªæ§é ã¯é¿ãã
ð é¢é£èšäº
ð ãŸãšã
仿¥ã¯ãNPUã䜿ã£ãŠããŒã«ã«LLMãé«éåããçµæãã·ã§ã¢ããŸããã
éèŠãã€ã³ã:
NPUã䜿ããšåŠçã2-3åéããªãïŒå¹³å23.91 tok/séæïŒ
ç°å¢æ§ç¯ã¯æå€ãšç°¡åïŒ3ã¹ãããã§å®äºïŒ
ãã©ãã«ã¯ãã³ãã³ãããã³ããåèµ·åãã§å€§äœè§£æ±ºãã
ç¡æã§äœ¿ããŠãããŒã¿ãå€ã«åºãªãæåŒ·ç°å¢
æšæ¥ã®èšäºã§ãã©ã®AIã¢ãã«ãéžã¶ãããæ±ºããŸããã仿¥ã¯ãå®éã«åãããŠã©ããããéããããæž¬å®ããŸããã
ð æ¬¡åäºå
ææ¥ã¯ãAIã«ã声ããšãå§¿ããäžãããããžã§ã¯ãã®æºåç·šããå±ãããŸãã
AIãšèªç¶ã«äŒè©±ã§ããç°å¢ãäœã£ãŠãããŸãã®ã§ããæ¥œãã¿ã«ïŒ
ðš ããŸãïŒèŠåºãç»åäœæããã³ãã
仿¥ã®èŠåºãç»åã®ããŒã¹ã¯ãã£ãããŒïŒChatGPTïŒã«äžèšããã³ããã§äœæããŠããããŸããïŒïŒ
æãããªç
§æã§æ®åœ±ãããè¶
çŸå®çã§ãããã§ãã·ã§ãã«ãªåçãäœæããŠãã ããã
äžèšæ¡ä»¶ã®noteèŠåºãç»åããµã€ãºã¯æšªé·ã§äœæããŠãã ããããµã€ãºã¯å¿
ãæšªé·ã§äœæããŠãã ããã
## ðš èŠåºãç»åæ¡
### ãã¶ã€ã³ã³ã³ã»ãã
- **èæ¯**: æ·±ãéããæãã玫ãžã®ã°ã©ããŒã·ã§ã³ïŒAIã»ãã¯ãããžãŒæïŒ
- **ã¡ã€ã³ããžã¥ã¢ã«**:
- äžå€®ã«NPUãããã®ã€ã©ã¹ãïŒå
ãåè·¯åºæ¿é¢šïŒ
- åšãã«åŠçé床ã瀺ãç¢å°ãã¹ããŒãã©ã€ã³
- ã23.91 tok/sãã®æ°åã倧ãã衚瀺
- **ããã¹ãèŠçŽ **:
- äžéš: ãNPUé«éåãïŒå€§ããã»å€ªåã»çœè²ïŒ
- äžå€®: ã23.91 tok/séæïŒãïŒäžãµã€ãºã»ã€ãšããŒïŒ
- äžéš: ãNexa SDKãã³ãããŒã¯çµæãïŒå°ãµã€ãºã»çœè²ïŒ
- **è£
食**: 皲劻ããŒã¯ããã©ãã©ãšãã§ã¯ããã¹ããŒãã©ã€ã³
### äœææé
1. ã¹ã©ã€ããµã€ãºïŒ1536Ã1024pxïŒã®æšªé·ãã©ãŒããã
2. èæ¯ã«æ·±ãéâæãã玫ã®ã°ã©ããŒã·ã§ã³ãèšå®
3. äžå€®ã«NPUãããã€ã©ã¹ãïŒå
ãåè·¯åºæ¿ãã¿ãŒã³ïŒãé
眮
4. ãããã®åšãã«ã¹ããŒãã©ã€ã³ã»ç¢å°ãæç»
5. ã23.91 tok/sãã倧ããç®ç«ã€ããã«é
眮ïŒ72ptã倪åãã€ãšããŒïŒ
6. ããã¹ãã3æ®µæ§æã§è¿œå ïŒ
- äžéš: ãNPUé«éåãïŒ48ptã倪åãçœè²ïŒ
- äžå€®: ã23.91 tok/séæïŒãïŒ36ptãã€ãšããŒïŒ
- äžéš: ãNexa SDKãã³ãããŒã¯çµæãïŒ24ptãçœè²ïŒ
7. 皲劻ããŒã¯ããã©ãã©ãšãã§ã¯ãã远å
8. ã¢ãŒã·ã§ã³ã©ã€ã³ã§åçãªé°å²æ°ãæŒåº
9. å³äžã«ãYaroTechãã®ããŽã12ptã§æ§ããã«é
眮
10. å
šäœã®ãã©ã³ã¹ã確èªããŠå®æ
â»ãã¯ãããžãŒæãšé«éæ§ã衚çŸ
â»æ°å€ã§å
·äœæ§ãã¢ããŒã«
â»çŽ«ã°ã©ããŒã·ã§ã³ã§å
鲿§ãæŒåº#YaroTech #NPU #ããŒã«ã«LLM #AIé«éå #NexaSDK #SnapdragonXElite #SurfaceLaptop #ãªãã©ã€ã³AI #ãã©ã€ãã·ãŒéèŠ #ãã¯ãããžãŒ