# Neural Network Runtime Kit简介 ## 使用场景 Neural Network Runtime(NNRt, 神ç»ç½‘络è¿è¡Œæ—¶ï¼‰æ˜¯é¢å‘AI领域的跨芯片推ç†è®¡ç®—è¿è¡Œæ—¶ï¼Œä½œä¸ºä¸é—´æ¡¥æ¢è¿žé€šä¸Šå±‚AIæŽ¨ç†æ¡†æž¶å’Œåº•å±‚åŠ é€ŸèŠ¯ç‰‡ï¼Œå®žçŽ°AI模型的跨芯片推ç†è®¡ç®—。 Neural Network Runtimeçš„Native接å£ä¸»è¦é¢å‘AIæŽ¨ç†æ¡†æž¶çš„å¼€å‘者,或者希望直接使用AIåŠ é€Ÿç¡¬ä»¶å®žçŽ°æ¨¡åž‹æŽ¨ç†åŠ é€Ÿçš„åº”ç”¨å¼€å‘者。 AIæŽ¨ç†æ¡†æž¶å¯ä»¥è°ƒç”¨NNRt的构图接å£å°†æŽ¨ç†æ¡†æž¶çš„æ¨¡åž‹å›¾è½¬æ¢ä¸ºNNRt内部使用的模型图,然åŽè°ƒç”¨NNRt的编译和执行接å£åœ¨NNRt底层对接的AIåŠ é€Ÿç¡¬ä»¶ä¸Šè¿›è¡Œæ¨¡åž‹æŽ¨ç†ã€‚该方å¼å¯ä»¥å®žçŽ°æ— æ„ŸçŸ¥çš„è·¨AI硬件推ç†ï¼Œä½†æ˜¯é¦–æ¬¡åŠ è½½æ¨¡åž‹é€Ÿåº¦è¾ƒæ…¢ã€‚ AIæŽ¨ç†æ¡†æž¶å’Œåº”用开å‘者也å¯ä»¥æ— 需调用NNRt构图接å£ï¼Œç›´æŽ¥ä½¿ç”¨æŸæ¬¾å…·ä½“硬件对应的离线模型在NNRt上执行模型推ç†ã€‚该方å¼ä»…能实现在特定AI硬件上执行推ç†ï¼Œä½†æ˜¯é¦–æ¬¡åŠ è½½æ¨¡åž‹é€Ÿåº¦è¾ƒå¿«ã€‚ ## NNRtæž¶æž„ 如图1所示,除了Native开放接å£ï¼ŒNNRt软件架构包å«å¦‚ä¸‹å‡ ä¸ªåŠŸèƒ½æ¨¡å—: 1. <b>在线构图</b>:AIæŽ¨ç†æ¡†æž¶éœ€è¦è°ƒç”¨NNRt的构图接å£å°†æŽ¨ç†æ¡†æž¶çš„æ¨¡åž‹å›¾è½¬æ¢ä¸ºNNRt内部模型图。而系统内置的MindSpore LiteæŽ¨ç†æ¡†æž¶ï¼ˆå…·ä½“å¯å‚考[MindSpore Lite Kit](../mindspore/mindspore-lite-guidelines.md))通过MindIR模型图对接NNRt。由于MindIR模型图和NNRtå†…éƒ¨æ¨¡åž‹å›¾æ ¼å¼å…¼å®¹ï¼Œå› æ¤MindSpore Liteæ— éœ€è°ƒç”¨NNRt的构图接å£å³å¯å¯¹æŽ¥NNRt。 2. <b>模型编译</b>:NNRt内部模型图或离线模型文件需è¦é€šè¿‡NNRt的编译接å£åœ¨åº•层AI硬件驱动上编译为硬件相关的模型对象,åŽç»å°±å¯ä»¥åœ¨è¯¥ç¡¬ä»¶ä¸Šæ‰§è¡Œæ¨¡åž‹æŽ¨ç†ã€‚ 3. <b>模型推ç†</b>:基于已编译的模型对象创建执行器,设置推ç†çš„è¾“å…¥å’Œè¾“å‡ºå¼ é‡ï¼Œç„¶åŽåœ¨AI硬件上执行模型推ç†ã€‚ 4. <b>内å˜ç®¡ç†</b>:推ç†çš„è¾“å…¥å’Œè¾“å‡ºå¼ é‡éœ€è¦åŒ…å«å¯¹åº”的数æ®å†…å˜ï¼Œè¯¥æ¨¡å—负责在AI硬件驱动上申请共享内å˜å¹¶èµ‹ç»™å¼ é‡ï¼Œå¹¶åœ¨å¼ é‡é”€æ¯æ—¶é‡Šæ”¾å¯¹åº”共享内å˜ã€‚通过AI硬件驱动上的共享内å˜å¯ä»¥å®žçŽ°è¾“å…¥å’Œè¾“å‡ºæ•°æ®çš„“零拷è´â€ï¼Œæå‡æŽ¨ç†æ€§èƒ½ã€‚ 5. <b>设备管ç†</b>:负责展示NNRt对接的AI硬件信æ¯ï¼Œå¹¶æä¾›äº†é€‰æ‹©AI硬件的功能。 6. <b>模型缓å˜</b>ï¼šå·²ç¼–è¯‘çš„æ¨¡åž‹å¯¹è±¡å†™æˆæ¨¡åž‹ç¼“å˜æ ¼å¼ï¼Œä¿å˜åœ¨æ–‡ä»¶æˆ–一段内å˜ä¸ã€‚在下一次编译模型时,å¯ä»¥ç›´æŽ¥ä»Žæ–‡ä»¶æˆ–内å˜å½¢å¼çš„æ¨¡åž‹ç¼“å˜ä¸åŠ è½½ï¼Œå¤§å¹…æå‡ç¼–译速度。 7. <b>离线模型推ç†</b>:除了支æŒé€šè¿‡æž„å›¾æŽ¥å£æž„é€ æ¨¡åž‹å›¾ï¼ŒNNRt也支æŒç›´æŽ¥ä½¿ç”¨AI硬件相关的模型文件(简称为离线模型)进行推ç†ã€‚应用开å‘者使用AI硬件厂商æä¾›çš„æ¨¡åž‹è½¬æ¢å™¨å°†åŽŸå§‹è®ç»ƒæ¨¡åž‹è½¬æ¢ä¸ºAI硬件对应的离线模型文件,并将它部署在应用程åºä¸ï¼Œåœ¨åº”用è¿è¡ŒæœŸé—´é€šè¿‡NNRt的离线模型编译接å£ä¼ 入。离线模型仅能在对应AI硬件上编译和推ç†ï¼Œæ— 法支æŒè·¨AIç¡¬ä»¶å…¼å®¹ã€‚ä½†ç”±äºŽç¦»çº¿æ¨¡åž‹å’Œç¡¬ä»¶ç›´æŽ¥ç›¸å…³ï¼Œå› æ¤ç¼–译速度通常很快。 **图1** Neural Network Runtime架构图  ## äº®ç‚¹ç‰¹å¾ - NNRté¢å‘AIæŽ¨ç†æ¡†æž¶å’ŒAI应用开放了统一的AIåŠ é€Ÿç¡¬ä»¶æŽ¨ç†æŽ¥å£ï¼Œå¯æ”¯æŒæ— 感知的跨AI硬件推ç†ã€‚ - NNRtæä¾›äº†æž„图接å£ï¼Œå¯ä»¥è®©AIæŽ¨ç†æ¡†æž¶å°†å†…部模型图对接到NNRt。 - NNRtæä¾›äº†æ¨¡åž‹ç¼–译缓å˜åŠŸèƒ½ï¼Œå¯å°†æ¨¡åž‹ç¼–译结果ä¿å˜ä¸ºç¼“å˜æ–‡ä»¶ï¼Œå¤§å¹…åŠ å¿«æ¨¡åž‹åŠ è½½é€Ÿåº¦ã€‚ - NNRtæä¾›äº†ç¡¬ä»¶ç›¸å…³çš„ç¦»çº¿æ¨¡åž‹åŠ è½½åŠŸèƒ½ï¼Œå¯ç¼©çŸæ¨¡åž‹ç¼–译时间,但是仅å¯åœ¨å¯¹åº”AI硬件上执行。 - NNRtæä¾›äº†é…置推ç†ä¼˜å…ˆçº§ã€æ€§èƒ½æ¨¡å¼ã€FP16模å¼ç‰å¸¸è§ç¡¬ä»¶å±žæ€§ï¼Œä¹Ÿæ”¯æŒé…置特定硬件的自定义扩展属性。 - NNRt通过申请AIç¡¬ä»¶é©±åŠ¨ä¸Šçš„å…±äº«å†…å˜æ¥å®žçŽ°æ•°æ®çš„“零拷è´â€ï¼Œæå‡æŽ¨ç†æ€§èƒ½ã€‚ ## 能力范围 - NNRtä»…å¯æä¾›å·²åœ¨åº•å±‚æŽ¥å…¥çš„AIåŠ é€Ÿç¡¬ä»¶çš„AI推ç†èƒ½åŠ›ï¼Œä¸æä¾›CPUç‰é€šç”¨ç¡¬ä»¶ä¸Šçš„AI推ç†èƒ½åŠ›ã€‚ - NNRt仅能æä¾›å¤§å¤šæ•°AI硬件共有的基础AI推ç†èƒ½åŠ›å’Œç¡¬ä»¶å±žæ€§é…ç½®ï¼Œä¾‹å¦‚ç¼–è¯‘ã€æ‰§è¡Œã€å†…å˜ç®¡ç†ã€ä¼˜å…ˆçº§ã€æ€§èƒ½æ¨¡å¼ç‰ã€‚如果希望é…ç½®æŸæ¬¾AI硬件特有的硬件属性,å¯ä»¥é€šè¿‡NNRtæä¾›çš„自定义扩展属性接å£é…置,具体属性åç§°å’Œå€¼éœ€è¦æŸ¥é˜…硬件厂商的文档。 - NNRtç›®å‰æ”¯æŒå¸¸ç”¨ç®—å56个,åŽç»ç‰ˆæœ¬ä¼šé€æ¥å¢žåŠ ã€‚æ³¨æ„NNRt的算åå¹¶æ²¡æœ‰å…·ä½“å®žçŽ°ï¼Œä»…ä½œä¸ºå†…éƒ¨æ¨¡åž‹å›¾çš„å…ƒç´ å¯¹æŽ¥åº•å±‚AI硬件,具体算å实现其实是在AI硬件驱动ä¸ã€‚ - NNRtç›®å‰ä»…支æŒåŒæ¥æŽ¨ç†ï¼Œè®¡åˆ’在åŽç»ç‰ˆæœ¬æ”¯æŒå¼‚æ¥æŽ¨ç†ã€‚ - NNRt䏿”¯æŒå¤šçº¿ç¨‹å¹¶å‘æž„å›¾ï¼Œæ˜¯å¦æ”¯æŒå¹¶å‘编译和执行å–å†³äºŽåº•å±‚ç¡¬ä»¶é©±åŠ¨æ˜¯å¦æ”¯æŒã€‚ ## 与相关Kit的关系 Neural Network Runtime Kit坿”¯æŒç³»ç»Ÿå†…置的MindSpore LiteæŽ¨ç†æ¡†æž¶ï¼ˆMindSpore Lite Kit),MindSpore Lite已开放了é…ç½®NNRtçš„Native接å£ã€‚ MindSpore Lite对接NNRt坿— 需构图,两者共享åŒä¸€ä»½æ¨¡åž‹å›¾æ ¼å¼ï¼ˆMindIRï¼‰ï¼Œå› æ¤ä½¿ç”¨MindSpore Lite在NNRtä¸ŠåŠ è½½æ¨¡åž‹å°†å¿«äºŽå…¶ä»–AIæŽ¨ç†æ¡†æž¶ã€‚ æ¤å¤–,MindSpore Lite也支æŒé€šç”¨ç¡¬ä»¶CPU/GPU与NNRt AIåŠ é€Ÿç¡¬ä»¶ä¹‹é—´çš„æ¨¡åž‹å¼‚æž„æŽ¨ç†åŠŸèƒ½ã€‚