• [API使用] 【mindspore】mindspore不支持Ascend与SGD的问题
    【功能模块】mindspore【操作步骤&问题现象】1、一开始用的是Ascend,但是提示不支持2、改用CPU之后又显示不支持SGD【截图信息】
  • [调优经验] MindSpore Ascend 内存管理
    在调试网络的时候,我们经常会遇到`OutOfMemory`报错,下面基于MindSpore r1.5分支代码介绍下MindSpore在Ascend设备上对内存的管理。 ## 内存管理介绍 Ascend在对内存分为静态内存和动态内存,它们分别指: - 静态内存: - Parameter - 网络中的权重 - Value Node - 网络中的常量 - Output - 网络的输出 - 动态内存: - Output Tensor - 网络中的算子的输出Tensor - Workspace Tensor - 网络中的部分算子在计算过程中的临时buffer MindSpore对Ascend设备内存分成4层进行管理: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/154807uimq1ru0yvawoyx2.png) ### 第一层 Runtime Runtime直接对板载的32GB内存进行管理 ### 第二层 Context 如果用户在网络脚本中使用了Context配置MindSpore后端使用的内存大小, MindSpore则按照用户设置大小去向下一层Runtime申请,如果用户没有设置,则默认申请30GB内存,预留2GB内存给系统中的HCCL等其他模块使用。 设置MindSpore后端使用内存大小为25GB的代码为: ```python context.set_context(variable_memory_max_size='25GB') ``` ### 第三层 双游标 为了动态管理动态内存与静态内存的大小,MindSpore给动态内存和动态内存分别设置了一个游标,在游标交会的时候内存使用完毕: - 动态内存游标 动态内存的地址增长从低地址向高地址增长,在`GRAPH_MODE`模式下,每个计算图的偏移都从0开始 - 静态内存游标 静态内存的地址增长从高地址向低地址增长,在`GRAPH_MODE`模式下,所有计算图的静态内存都会同时存在 ### 第四层 内存复用 为了进一步提高内存的使用效率,在第三层的基础上进一步引入SOMAS及Memory Pool对内存进行管理 - SOMAS (Safe Optimized Memory Allocation Solver) “约束编程 - 并行拓扑内存优化”(SOMAS) :将计算图并行流与数据依赖进行聚合分析,得到算子间祖先关系构建张量全局生命期互斥约束,使用多种启发式算法求解最优的内存静态规划,实现逼近理论极限的内存复用从而提升网络训练Batch Size数量和训练吞吐量FPS。 在`GRAPH_MODE`模式下,计算图中的**动态内存**(所有算子的Output Tensor及Workspace Tensor)都是用SOMAS进行分配,在SOMAS计算出整体使用大小后,一次向第三层申请当前图大小的静态内存 - Memory Pool Memory Pool主要通过分析Tensor间的引用关系对Tensor使用的内存进行申请释放,在使用BestFit最佳适应内存分配算法对内存进行分配。 在`GRAPH_MODE`模式下,计算图中的**静态内存**(图的权重、常量及输出)都使用Memory Pool进行分配,Memory Pool一次向第三层申请单位大小的内存进行复用,当内存池中的无空闲内存块时,再向第三层申请单位大小的内存进行复用 在`PYNATIVE_MODE`模式下,计算图中**所有内存**均使用Memory Pool进行分配,Memory Pool一次向第三层申请单位大小的内存进行复用,当内存池中的无空闲内存块时,再向第三层申请单位大小的内存进行复用 ## 模型内存大小计算 在`GRAPH_MODE`模式下,模型的内存使用大小计算方式为: ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/1548301zfttktg2snu1nrd.png) ## 日志分析 ### 第二层 Context ``` [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:49:39.370.492 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:89] GetDeviceMemSizeFromContext] context variable_memory_max_size:25 * 1024 * 1024 * 1024 [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:49:39.370.504 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:96] GetDeviceMemSizeFromContext] variable_memory_max_size(GB):25 [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:49:39.436.350 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:71] MallocDeviceMemory] Call rtMalloc to allocate device memory Success, size : 26843545600 bytes , address : 0x108800000000 ``` 1. 用户通过context设置MindSpore后端使用内存为25GB 2. MindSpore向第一层Runtime申请25GB内存,起始地址为0x108800000000 ### 第三层 双游标 - 静态内存: ``` [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.685.566 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:143] MallocStaticMem] Malloc Memory for Static: size[147968], Memory statistics: total[26843545600] dynamic [0] static [8388608], Pool statistics: pool total size [8388608] used [220160] communication_mem:0 ``` 申请大小为`147968`Byte的静态内存,当前内存分配情况为: 总内存大小:`26843545600` Byte 动态内存大小:`0` Byte 静态内存大小:`8388608` Byte 内存池情况为: 内存池总大小:`8388608` Byte 内存池已使用内存大小:`220160` Byte - 动态内存: ``` [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.950.824 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:177] MallocDynamicMem] Malloc Memory for Dynamic: size[1513511424], Memory statistics: total[26843545600] dynamic[0] static[209715200] communication_mem: 0 ``` 申请大小为`1513511424` Byte的静态内存,当前内存分配情况为: 总内存大小:`26843545600` Byte 动态内存大小:`0` Byte 静态内存大小:`209715200` Byte 最后一次内存申请日志中的**静态内存大小**与**动态内存大小**之**和**就是此模型的**占用内存总大小** ### 第四层 内存复用 - SOMAS: ``` [INFO] PRE_ACT(60236,7fe82e1cb700,python):2021-11-09-10:51:01.950.806 [mindspore/ccsrc/backend/optimizer/somas/somas.cc:1732] GenGraphStatisticInfo] Total Dynamic Size (Upper Bound): 3512785408 Theoretical Optimal Size (Lower Bound): 1509126144 Total Workspace Size: 0 Total Communication Input Tensor Size: 0 Total Communication Output Tensor Size: 0 Total LifeLong All Tensor Size: 19268608 Total LifeLong Start Tensor Size: 0 Total LifeLong End Tensor Size: 0 Reused Size(Allocate Size): 1513510912 ``` Total Dynamic Size (Upper Bound): 网络中所有算子的输出Tensor及Workspace Tensor的内存大小总和 Theoretical Optimal Size (Lower Bound): 网络中所有算子输出完全复用后的理论最优值 Reused Size(Allocate Size):当前网络使用SOMAS算法复用后所需内存大小 ``` [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.950.815 [mindspore/ccsrc/runtime/device/memory_manager.cc:48] MallocSomasDynamicMem] Graph 1: TotalSomasReuseDynamicSize [1513510912] [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.950.824 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:177] MallocDynamicMem] Malloc Memory for Dynamic: size[1513511424], Memory statistics: total[26843545600] dynamic[0] static[209715200] communication_mem: 0 [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.950.831 [mindspore/ccsrc/runtime/device/memory_manager.cc:51] MallocSomasDynamicMem] Somas Reuse Memory Base Address [0x108800000000], End Address [0x10885a365800] ``` 1. SOMAS复用后所需内存大小为`1513511424` Byte 2. 向第三层申请大小为`1513511424` Byte的动态内存 3. SOMAS管理的内存起始地址为`0x108800000000`, 终止地址为`0x10885a365800` - Memory Pool ``` [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.692.943 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_pool.cc:80] AllocDeviceMem] Malloc Memory: Pool, total[26843545600] (dynamic[0] memory pool[142606336]) malloc [16777216] ``` 向Pool申请大小为`16777216`Byte的内存,当前后端总内存为`26843545600`Byte, 动态内存大小为0,内存池大小为`142606336`Byte ### 静态内存使用情况 ``` [INFO] DEVICE(60236,7fe82e1cb700,python):2021-11-09-10:51:01.692.840 [mindspore/ccsrc/runtime/device/kernel_runtime.cc:621] AssignStaticMemoryInput] Assign Static Memory for Input node, size:2097152 node:moments.layer4.0.conv1.weight index: 0 ``` 给图中的节点`moments.layer4.0.conv1.weight`的第`0`个输出分配大小为`2097152`Byte的静态内存 ## 常见问题 ### 设备被占用 Malloc device memory failed ``` [EXCEPTION] DEVICE(98186,7f40043f8700,python):2021-11-09-11:39:49.758.665 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:64] MallocDeviceMemory] Malloc device memory failed, size[32212254720], ret[207001], Device 2 may be other processes occupying this card, check as: ps -ef|grep python ``` - 问题分析: MindSpore向第一层Runtime申请内存30GB失败。 由于MindSpore在初始化的时候会直接向Ascend Runtime申请30GB内存,然后一直持有,后续有其他进程再次向Runtime申请30GB内存的时候会导致申请失败。 - 解决方案: 通过ps -ef|grep python查找正在跑的进程,等待进程结束释放设备或者kill掉进程释放设备 ### 静态内存分配失败 Memory not enough: ``` [INFO] DEVICE(95511,7fc881aed700,python):2021-11-09-15:39:06.632.247 [mindspore/ccsrc/runtime/device/kernel_runtime.cc:621] AssignStaticMemoryInput] Assign Static Memory for Input node, size:16777216 node:lamb_v.bert.bert.bert_encoder.layers.11.intermediate.weight index: 0 [INFO] DEVICE(95511,7fc881aed700,python):2021-11-09-15:39:06.632.254 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:143] MallocStaticMem] Malloc Memory for Static: size[16777728], Memory statistics: total[4294967296] dynamic [0] static [4286578688], Pool statistics: pool total size [4286578688] used [3272974848] communication_mem:0 [EXCEPTION] DEVICE(95511,7fc881aed700,python):2021-11-09-15:39:06.632.266 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_pool.cc:53] CalMemBlockAllocSize] Memory not enough: current free memory size[8388608] is smaller than required size[16777728], dynamic offset [0] memory pool offset[4286578688]) ``` - 问题分析: 申请动态内存失败,从日志可以知道后端整体可用内存为`4294967296` Byte,当前已使用动态内存为`0`Byte, 内存池使用了的静态内存为`4286578688`Byte,当前需要申请静态内存为`16777728` Byte,,已使用内存加上申请内存超过总内存大小,故报Memory not enough - 解决方案: 1. 通过context增加MindSpore后端使用内存大小,最大可以设置为31GB ```python context.set_context(variable_memory_max_size='31GB') ``` 2. 排查是否引入了异常大的`Paramter`或者Value Node,例如单个数据shape为[640,1024,80,81],数据类型为float32,单个数据大小超过15G`(640*1024*80*81*4)`,这样差不多大小的两个数据相加时,占用内存超过3*15G,容易造成内存不足,需要检查此类节点参数 3. 使用可视化工具或静态内存使用情况日志分析内存使用情况,排查异常节点 4. 可以上[官方论坛](https://bbs.huaweicloud.com/forum/forum-1076-1.html)发帖提出问题,将会有专门的技术人员帮助解决 ### 动态内存分配失败 Out of memory!!! ``` [INFO] DEVICE(61069,7f89c77cd700,python):2021-11-09-14:49:54.398.228 [mindspore/ccsrc/runtime/device/memory_manager.cc:48] MallocSomasDynamicMem] Graph 1: TotalSomasReuseDynamicSize [28929622528] [INFO] DEVICE(61069,7f89c77cd700,python):2021-11-09-14:49:54.398.238 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:177] MallocDynamicMem] Malloc Memory for Dynamic: size[28929623040], Memory statistics: total[32212254720] dynamic[0] static[5142216704] communication_mem: 0 [EXCEPTION] DEVICE(61069,7f89c77cd700,python):2021-11-09-14:49:54.398.250 [mindspore/ccsrc/runtime/device/ascend/ascend_memory_manager.cc:183] MallocDynamicMem] Out of memory!!! total[32212254720] (dynamic[0] memory pool[5142216704]) malloc [28929623040] failed! Please try to reduce 'batch_size' or check whether exists extra large shape. More details can be found in mindspore's FAQ ``` - 问题分析: 申请动态内存失败,从日志可以知道后端整体可用内存为`32212254720` Byte,当前已使用动态内存为`0`Byte, 内存池使用了的静态内存为`5142216704`Byte,当前需要申请内存内存为`28929623040` Byte, 动态内存需求太大,已使用内存加上申请内存超过总内存大小,故报Out of memory!!! - 解决方案: 动态内存过大导致内存占用过多的情况大概有以下几种情况: 1. Batch Size过大,处理数据多,内存占用较大 2. 通信算子占用内存较多导致整体内存复用率较低 3. 内存复用算法在当前网络下效率较低 4. 内存复用模块异常 在遇到这种问题时,可以依次通过以下步骤处理 1. 通过context增加MindSpore后端使用内存大小,最大可以设置为31GB ``` context.set_context(variable_memory_max_size='31GB') ``` 2. 减小Batch Size,降低网络内存使用 3. 使用可视化工具分析内存使用情况,调整网络结构,减小Tensor的生命周期,让Tensor产生后尽快被使用,使用完后Tensor的内存可以释放给后面的Tensor使用 4. 可以上[官方论坛](https://bbs.huaweicloud.com/forum/forum-1076-1.html)发帖提出问题,将会有专门的技术人员帮助解决 ### HCCL申请内存失败 Device malloc failed ```shell [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.236.063 [ascend][curpid: 132896, 133393][drv][devmm][devmm_ioctl_advise 166] Ioctl device error! ptr=0x1080d0000000, count=209747968, advise=0x9c, device=7. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.238.839 [ascend][curpid: 132896, 133393][drv][devmm][devmm_ioctl_alloc_and_advise 205] advise mem error! ret=6 [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.238.849 [ascend][curpid: 132896, 133393][drv][devmm][devmm_virt_heap_alloc_device 421] devmm_ioctl_alloc error. ptr=0x1080d0000000. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.238.857 [ascend][curpid: 132896, 133393][drv][devmm][devmm_virt_heap_alloc 394] alloc phy addr failed. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.238.867 [ascend][curpid: 132896, 133393][drv][devmm][devmm_alloc_from_normal_heap 896] heap_alloc_managed out of memory, pp=0x1, bytesize=209747968. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.238.877 [ascend][curpid: 132896, 133393][drv][devmm][devmm_alloc_managed 134] heap_alloc_managed out of memory, pp=0x1, bytesize=209747968. [ERROR] RUNTIME(132896,python3.7):2021-10-30-10:22:16.238.890 [npu_driver.cc:691]133393 DevMemAllocHugePageManaged:[driver interface] halMemAlloc failed: device_id=7, size=209747968, type=16, env_type=3, drvRetCode=6! [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.370.700 [ascend][curpid: 132896, 133393][drv][devmm][devmm_ioctl_advise 166] Ioctl device error! ptr=0x108050000000, count=209747968, advise=0x98, device=7. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.863.258 [ascend][curpid: 132896, 133393][drv][devmm][devmm_ioctl_alloc_and_advise 205] advise mem error! ret=6 [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.863.277 [ascend][curpid: 132896, 133393][drv][devmm][devmm_virt_heap_alloc_device 421] devmm_ioctl_alloc error. ptr=0x108050000000. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.863.287 [ascend][curpid: 132896, 133393][drv][devmm][devmm_virt_heap_alloc 394] alloc phy addr failed. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.863.301 [ascend][curpid: 132896, 133393][drv][devmm][devmm_alloc_from_normal_heap 896] heap_alloc_managed out of memory, pp=0x1, bytesize=209747968. [ERROR] DRV(132896,python3.7):2021-10-30-10:22:16.863.311 [ascend][curpid: 132896, 133393][drv][devmm][devmm_alloc_managed 134] heap_alloc_managed out of memory, pp=0x1, bytesize=209747968. [ERROR] RUNTIME(132896,python3.7):2021-10-30-10:22:16.863.324 [npu_driver.cc:726]133393 DevMemAllocManaged:[driver interface] halMemAlloc failed: size=209747968, deviceId=7, type=16, env_type=3, drvRetCode=6! [ERROR] RUNTIME(132896,python3.7):2021-10-30-10:22:16.863.358 [npu_driver.cc:802]133393 DevMemAllocOnline:DevMemAlloc huge page failed: deviceId=7, type=16, size=209747968, retCode=117571606! [ERROR] RUNTIME(132896,python3.7):2021-10-30-10:22:16.863.376 [logger.cc:349]133393 DevMalloc:Device malloc failed, size=209747968, type=16. [ERROR] RUNTIME(132896,python3.7):2021-10-30-10:22:16.863.405 [api_c.cc:801]133393 rtMalloc:ErrCode=207001, desc=[driver error:out of memory], InnerCode=0x7020016 [ERROR] RUNTIME(132896,python3.7):2021-10-30-10:22:16.863.418 [error_message_manage.cc:41]133393 ReportFuncErrorReason:rtMalloc execute failed, reason=[driver error:out of memory] [ERROR] HCCL(132896,python3.7):2021-10-30-10:22:16.863.488 [adapter.cc:182][hccl-132896-1-1635560488-hccl_world_group][1][Malloc][Mem]errNo[0x000000000500000f] rtMalloc failed, return[207001], para: devPtrAddr[(nil)], size[209747968]. [ERROR] HCCL(132896,python3.7):2021-10-30-10:22:16.863.499 [mem_device.cc:45][hccl-132896-1-1635560488-hccl_world_group][1][DeviceMem][Alloc]rt_malloc error, ret[15], size[209747968] [ERROR] HCCL(132896,python3.7):2021-10-30-10:22:16.863.508 [op_base.cc:971][hccl-132896-1-1635560488-hccl_world_group][1][Create][OpBasedResources]In create workspace mem, malloc failed. [ERROR] HCCL(132896,python3.7):2021-10-30-10:22:16.863.517 [op_base.cc:408][hccl-132896-1-1635560488-hccl_world_group][1]call trace: ret -> 3 [ERROR] KERNEL(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.551 [mindspore/ccsrc/backend/kernel_compiler/hccl/hcom_all_reduce_scatter.cc:39] Launch] HcclReduceScatter faled, ret:3 [ERROR] DEVICE(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.576 [mindspore/ccsrc/runtime/device/kernel_runtime.cc:1521] LaunchKernelMod] Launch kernel failed. [ERROR] DEVICE(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.603 [mindspore/ccsrc/runtime/device/kernel_runtime.cc:1563] LaunchKernels] LaunchKernelMod failed! [CRITICAL] SESSION(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.640 [mindspore/ccsrc/backend/session/ascend_session.cc:1359] Execute] run task error! [INFO] DEBUG(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.672 [mindspore/ccsrc/debug/trace.cc:121] TraceGraphEval] Length of **ysis graph stack is empty. [INFO] DEBUG(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.685 [mindspore/ccsrc/debug/trace.cc:385] GetEvalStackInfo] Get graph **ysis information begin [INFO] DEBUG(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.694 [mindspore/ccsrc/debug/trace.cc:388] GetEvalStackInfo] Length of **ysis information stack is empty. [ERROR] SESSION(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.883 [mindspore/ccsrc/backend/session/ascend_session.cc:1758] ReportErrorMessage] Ascend error occurred, error message: EI0007: Failed to allocate resource [DeviceMemory], with info [size:209747968]. [driver interface] halMemAlloc failed: device_id=7, size=209747968, type=16, env_type=3, drvRetCode=6![FUNC:DevMemAllocHugePageManaged][FILE:npu_driver.cc][LINE:691] [driver interface] halMemAlloc failed: size=209747968, deviceId=7, type=16, env_type=3, drvRetCode=6![FUNC:DevMemAllocManaged][FILE:npu_driver.cc][LINE:726] DevMemAlloc huge page failed: deviceId=7, type=16, size=209747968, retCode=117571606![FUNC:DevMemAllocOnline][FILE:npu_driver.cc][LINE:802] Device malloc failed, size=209747968, type=16.[FUNC:DevMalloc][FILE:logger.cc][LINE:349] rtMalloc execute failed, reason=[driver error:out of memory][FUNC:ReportFuncErrorReason][FILE:error_message_manage.cc][LINE:41] [INFO] SESSION(132896,ffff25ffb160,python3.7):2021-10-30-10:22:16.863.908 [mindspore/ccsrc/backend/session/executor.cc:146] Run] End run graph 0 ``` - 问题分析: 从前面可以得知,在用户未使用Context指定MindSpore Backend使用的内存大小的时候,MindSpore会去申请30GB内存使用,预留2GB内存给HCCL及其他组件使用,从日志得知,此处为HCCL申请内存失败: ``` [ERROR] HCCL(132896,python3.7):2021-10-30-10:22:16.863.488 [adapter.cc:182][hccl-132896-1-1635560488-hccl_world_group][1][Malloc][Mem]errNo[0x000000000500000f] rtMalloc failed, return[207001], para: devPtrAddr[(nil)], size[209747968]. ``` 可见,此时预留给HCCL及其他组件使用的2GB内存并不足够,HCCL需要使用更多内存。 - 解决方案: 可以通过Context降低MindSpore Backend使用的内存大小,提高预留给HCCL及其他组件使用的内存大小 ```python context.set_context(variable_memory_max_size='25GB') ``` ## 可视化工具 MindInsight提供了对Device内存使用情况分析的可视化工具。 官网链接: [MindInsight 内存使用情况分析](https://mindspore.cn/mindinsight/docs/zh-CN/master/performance_profiling_ascend.html#id10) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/155026ipb9zbisfwcr4f0v.png) ![image.png](https://bbs-img.huaweicloud.com/data/forums/attachment/forum/202112/01/155034hbuk3oojrbbblsnt.png) 已转载到以下两个地址,欢迎浏览: https://www.jianshu.com/p/66d960947b6a https://zhuanlan.zhihu.com/p/451740245
  • [其他问题] MindSpore 是否支持使用C++库开发训练模型?
    MindSpore是否支持使用C++ API来开发、训练模型?类似于像PyTorch一样提供LibTorch  API? MindSpore Lite这个库好像没有提供自动微分api?
  • [模型训练] ValueError: For 'MatMul', the input dimensions must be equal, bu
    import mindspore.dataset as dsimport mindsporefrom mindspore.dataset.transforms.py_transforms_util import composeimport mindspore.dataset.transforms.py_transforms_util as py_transfrom mindspore.dataset.vision import Interimport mindspore.dataset.vision.c_transforms as c_visionimport mindspore.dataset.transforms.c_transforms as c_transformsimport matplotlib.pyplot as plt # import mindspore.dataset.vision.c_tranforms as c_vision#最开始是mindspore的版本太低了import osimport numpy as npfrom resnet import resnet50from mindspore.nn import SoftmaxCrossEntropyWithLogitsimport mindspore.nn as nnfrom mindspore import Modelfrom mindspore.common.initializer import TruncatedNormalfrom mindspore.train.callback import ModelCheckpoint, CheckpointConfig, LossMonitorfrom mindspore.common import dtype as mstypefrom easydict import EasyDict as edictimage_folder_dataset_dir = "./flower_photos_train"# dataset = ds.ImageFolderDataset(dataset_dir=image_folder_dataset_dir,#                                 class_indexing={'daisy':0,'dandelion':1,'roses':2,'sunflowers':3,'tulips':4})# print(dataset)ds.config.set_seed(8)# ds1 = ds.ImageFolderDataset(image_folder_dataset_dir,shuffle=True,class_indexing={'daisy':0,'dandelion':1,'roses':2,'sunflowers':3,'tulips':4},extensions=['.jpg'])????一去掉之后突然就有了ds1 = ds.ImageFolderDataset(image_folder_dataset_dir,shuffle=True,class_indexing={'daisy':0,'dandelion':1,'roses':2,'sunflowers':3,'tulips':4})transforms_list = [                 #    c_vision.Decode(),                #    c_vision.Resize([200,200]),                #    c_vision.RandomCropDecodeResize(size=(50, 75),scale=(0.25, 0.5),interpolation=Inter.NEAREST, max_attempts=5),                      c_vision.RandomCropDecodeResize(size=(200, 200),                                                        scale=(0.25, 0.5),                                                        interpolation=Inter.NEAREST,                                                        max_attempts=5),                                   c_vision.RandomHorizontalFlip(0.5),                #    c_vision.RandomCrop(512),                   c_vision.HWC2CHW(),                #    py_trans.ToTensor()]type_cast_op = c_transforms.TypeCast(mstype.float32)type_cast_op_label = c_transforms.TypeCast(mstype.float32)compose_trans = c_transforms.Compose(transforms_list)ds2 = ds1.map(operations=compose_trans,input_columns=['image'])ds2 = ds2.map(operations=type_cast_op,input_columns=['image'])ds2 = ds2.map(operations=type_cast_op_label, input_columns="label")ds2 = ds2.shuffle(3618)# ds2 = ds1.map(operations=[], input_columns="label")# dataset = ds2.batch(batch_size=8, input_columns=["image"])#????就一直不对# image_list,image_label = [],[]# for data in ds2.create_dict_iterator():#     image_list.append(data['image'])#     image_label.append(data['label'])# print(type(image_list[0].asnumpy()))# num_samples = 10# for i in range(num_samples):#     plt.subplot(1,num_samples,i+1)#     plt.imshow(image_list[i].asnumpy().transpose(1,2,0))#     plt.title(image_label[i].asnumpy())# plt.show()class Identification_Net(nn.Cell):    def __init__(self, num_class=5,channel=3,dropout_ratio=0.5,trun_sigma=0.01):  # 一共分五类,图片通道数是3        super(Identification_Net, self).__init__()        self.num_class = num_class        self.channel = channel        self.dropout_ratio=dropout_ratio                 self.conv1 = nn.Conv2d(self.channel, 32,                               kernel_size=5, stride=1, padding=0,                               has_bias=True, pad_mode="same",                               weight_init=TruncatedNormal(sigma=trun_sigma),bias_init='zeros')        self.relu = nn.ReLU()        self.max_pool2d = nn.MaxPool2d(kernel_size=2, stride=2,pad_mode="valid")        self.conv2 = nn.Conv2d(32, 64,                               kernel_size=5, stride=1, padding=0,                               has_bias=True, pad_mode="same",                               weight_init=TruncatedNormal(sigma=trun_sigma),bias_init='zeros')        self.conv3 = nn.Conv2d(64, 128,                               kernel_size=3, stride=1, padding=0,                               has_bias=True, pad_mode="same",                               weight_init=TruncatedNormal(sigma=trun_sigma),bias_init='zeros')        self.conv4 = nn.Conv2d(128, 128,                               kernel_size=3, stride=1, padding=0,                               has_bias=True, pad_mode="same",                               weight_init=TruncatedNormal(sigma=trun_sigma), bias_init='zeros')        self.flatten = nn.Flatten()        self.fc1 = nn.Dense(6*6*128, 1024,weight_init =TruncatedNormal(sigma=trun_sigma),bias_init = 0.1)        self.dropout = nn.Dropout(self.dropout_ratio)        self.fc2 = nn.Dense(1024, 512, weight_init=TruncatedNormal(sigma=trun_sigma), bias_init=0.1)        self.fc3 = nn.Dense(512, self.num_class, weight_init=TruncatedNormal(sigma=trun_sigma), bias_init=0.1)      def construct(self, x):        x = self.conv1(x)        x = self.relu(x)        x = self.max_pool2d(x)        x = self.conv2(x)        x = self.relu(x)        x = self.max_pool2d(x)        x = self.conv3(x)        x = self.max_pool2d(x)        x = self.conv4(x)        x = self.max_pool2d(x)        x = self.flatten(x)        x = self.fc1(x)        x = self.relu(x)        x = self.dropout(x)        x = self.fc2(x)        x = self.relu(x)        x = self.dropout(x)        x = self.fc3(x)        return x# net = resnet50(batch_size=32, num_classes=5)net = Identification_Net(num_class=5, channel=3)de_train = ds2.batch(batch_size=32,drop_remainder=True)# dataset = ds2.repeat()# ????????????????????# data_next=dataset.create_dict_iterator().get_next()  # dataset = dataset.repeat(1)# dataset = ds2ls = SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")# opt = nn.Momentum(filter(lambda x: x.requires_grad, net.get_parameters()), 0.01, 0.9)opt = nn.Momentum(params=net.trainable_params(), learning_rate=0.1, momentum=0.9)model = Model(net, loss_fn=ls, optimizer=opt, metrics={'acc'})epoch_size = 10model_path = "./ckpt"# os.system('rm -f {0}*.ckpt {0}*.meta {0}*.pb'.format(model_path))model.train(epoch=epoch_size, train_dataset=de_train)  # batch_num = dataset.get_dataset_size()# print(batch_num)# print(dataset.get_batch_size())# print(ds2.get_dataset_size())# cfg = edict({#     'data_path': 'flower_photos',#     'data_size':3670,#     'image_width': 100,  # 图片宽度#     'image_height': 100,  # 图片高度#     'batch_size': 32,#     'channel': 3,  # 图片通道数#     'num_class':5,  # 分类类别#     'weight_decay': 0.01,#     'lr':0.0001,  # 学习率#     'dropout_ratio': 0.5,#     'epoch_size': 400,  # 训练次数#     'sigma':0.01,     #     'save_checkpoint_steps': 1,  # 多少步保存一次模型#     'keep_checkpoint_max': 3,  # 最多保存多少个模型#     'output_directory': './code/flowers//model',  # 保存模型路径#     'output_prefix': "checkpoint_classification"  # 保存模型文件名字# })# net=Identification_Net(num_class=cfg.num_class, channel=cfg.channel, dropout_ratio=cfg.dropout_ratio)# net_loss = nn.SoftmaxCrossEntropyWithLogits(sparse=True, reduction="mean")# #opt# fc_weight_params = list(filter(lambda x: 'fc' in x.name and 'weight' in x.name, net.trainable_params()))# else_params=list(filter(lambda x: x not in fc_weight_params, net.trainable_params()))# group_params = [{'params': fc_weight_params, 'weight_decay': cfg.weight_decay},#                 {'params': else_params}]# net_opt = nn.Adam(group_params, learning_rate=cfg.lr, weight_decay=0.0)  # model = Model(net, loss_fn=net_loss, optimizer=net_opt, metrics={"acc"})# loss_cb = LossMonitor(per_print_times=de_train.get_dataset_size())# config_ck = CheckpointConfig(save_checkpoint_steps=cfg.save_checkpoint_steps,#                              keep_checkpoint_max=cfg.keep_checkpoint_max)# ckpoint_cb = ModelCheckpoint(prefix=cfg.output_prefix, directory=cfg.output_directory, config=config_ck)# print("============== Starting Training ==============")# model.train(cfg.epoch_size, de_train, callbacks=[loss_cb], dataset_sink_mode=True)  # # 使用测试集评估模型,打印总体准确率# metric = model.eval(de_test)# print(metric)出现了题目中的那个错误,在model.train()的时候,根本不知道怎么改,在哪里改。真的要疯了,mindspore太难用了,网上的资料太少太少了,文档里面也没有,搞不懂。真的mindspore对初学者非常非常不友好,每次出个错,找几百年,网上东西少得一批,非常浪费时间。这方面真的远远不如他们出来的框架。ValueError: For 'MatMul', the input dimensions must be equal, but got 'x1_col': 18432 and 'x2_row': 4608. And 'x' shape [32, 18432](transpose_a=False), 'y' shape [1024, 4608](transpose_b=True).
  • [其他问题] 【mindspore lite产品】【模型混淆功能】模型混淆能够成功,但是在端侧部署的时候推理失败
    【功能模块】3个模型混淆能够成功生成混淆后的模型,但是在端侧部署的时候推理失败【截图信息】混淆后的模型推理失败,log截图如下【日志信息】(可选,上传日志内容或者附件)
  • [分布式] 【视觉大模型ViT】【模型并行功能】modelarts分布式训练调试模型并行,报错aux_loss没有shape属性
    【功能模块】模型并行功能代码调试,shard功能使用【操作步骤&问题现象】1、云上分布式训练调试错误,使用8节点,64卡,调试模型并行功能2、目前遇到的问题报错aux_loss没有shape属性。错误没有显示行号【截图信息】【日志信息】(可选,上传日志内容或者附件)
  • [执行问题] Mindspore处理数据问题
    tensorflow1.15-mindspore1.3.0-cann5.0.2-euler2.8-aarch64Ascend: 1*Ascend910|CPU: 24核 96GB以上是使用平台notebook的具体参数。使用modelart平台时,运行机器翻译相关实验时,出现错误MindRecord File could not open successfully求解答谢谢
  • [数据处理] Mindspore读入pgm数据
    新手学习mindspore时,需要采用yaleB图像数据集,但是在读入pgm文件时,出现以下错误:这里训练10个以上的文件夹数据集就会报错,而10个及以下不会报错,不知道哪里出了问题,求解释
  • [热门活动] 昇思MindSpore开源社区成长计划,学技术领任务赢大奖!
    昇思MindSpore 是华为推出的全场景 AI 计算框架,具备统一的模型训练、推理和导出等接口,支持端、边、云等不同场景下的灵活部署。“昇思MindSpore开源社区成长计划”活动重磅上线!MindSpore 学习过程+MindSpore 开源实践,学练结合,快速提升个人技能,参与开源社区做贡献!完成 昇思MindSpore 课程,再认领昇思MindSpore 开源社区任务,从最简单的文档资料、语法规范,到一定难度的算子开发、应用案例都有涉及,一步一步引导开发者进入深度学习领域,迅速扩展和锻炼技术图谱,参与开源社区做贡献!01活动攻略介绍点击观看下方视频介绍,快速get活动攻略!https://www.bilibili.com/video/BV1eb4y1y7qi?spm_id_from=333.999.0.0 本次活动既适合没有经验想要参与开源的新手,也适合有一定经验的开源老将。直接查看、领取任务就可开始,无需报名! 02任务发布地址任务发布地址:MindSpore官方Gitee开源社区https://gitee.com/mindspore/community/issues/I4BD5F通过我们的活动,熟悉参与开源的流程并积累实践经验,可挑战解决社区内其他待解决问题~甚至作为外部开发者与内部成员一起共建和优化MindSpore!来吧,一起干一票大的吧~
  • [公告] MSG企业行 | 西安人工智能产业技术交流会暨昇思MindSpore企业行活动成功举办!
    2021年11月26日下午,西安人工智能产业技术交流会暨MindSpore企业行活动成功举办。本次活动以“打通政产学研用”链条,推动“双链”融合发展”为主题,共同探讨人工智能“卡脖子”技术解决方案,旨在推进人工智能与产业深度融合,加速产业智能化、高质量发展。西安市雁塔区副区长吕东国在致辞中表示,雁塔区要抓住时代风口,借着这个风口,实现雁塔区高质量发展的目标。如何实现高质量发展目标,就是靠五城,包括创新之城、高能之城、宜居之城、文化之城、法治之城,把创新摆在所有工作中的重中之重,这里所提的创新不仅仅是科技创新,是在科技创新基础上的体制创新、机制创新、模式创新、管理创新、服务创新。这种创新的引领创造了雁塔的速度,挑战不可能。这里重点说“高能之城”,我们通过研判,通过结合雁塔区的资源禀赋,确定了六大产业作为我们发展的重点,第一大产业就是我们迎着风口的大数据和人工智能产业。今年3月,我们和华为公司经过友好协商,在雁塔区未来产业城建设300P算力的计算中心,历时100天,创造了建设计算中心新的速度,300P的算力是在全国第二大算力中心。这些都是雁塔区为推动大数据人工智能产业发展的一些具体的举措。除了这个产业,我们还确定要发展新一代信息技术,医美、大健康、现代商贸服务业,培训产业,文旅产业作为雁塔区发展的重点。支撑雁塔区发展的未来。大数据人工智能产业的到来,以算法、算力、大数据为支撑,为三个重要的要素,我们的算力中心已经投运,我相信我们的算力中心一定能够为在座的企业、高校赋能。我也相信通过今天的人工智能产业技术交流会能够碰撞出更多的火花,能够为雁塔区西安市人工智能产业的发展创造新的发展机遇,雁塔区时刻准备者,雁塔区未来已来,雁塔区未来可期,预祝此次技术交流会取得圆满的成功。西安市智能质检创新联合体揭牌和授牌仪式西安市智能质检创新联合体将共同探讨人工智能技术在制造产线落地应用的机遇和挑战,把数字技术与行业知识深度结合,解决核心业务问题,提升生产效率和客户体验。昇腾万里,与开发者共创AI未来-                 全栈方案介绍华为昇腾计算业务副总裁刘鑫分享了题为《昇腾万里,与开发者共创AI未来-全栈方案介绍》的主题内容,华为将基于昇腾AI基础软硬件平台,打造从底层的核心AI芯片、硬件服务器、芯片使能,到中间层AI计算框架,再到上层应用使能平台的整个AI全栈解决方案。通过布局全国各地的昇腾生态创新中心,提供应用适配迁移服务、产业链企业赋能服务、行业解决方案孵化服务、昇腾人才培养服务、合作成果展示服务,从而加速合作伙伴产品上市、商业成功,与各方共建AI生态。 基于昇腾架构AI应用落地案例分享翔迅科技人工智能中心技术总监李刚随后带来了基于昇腾架构AI应用落地案例分享。翔迅科技目前正在与昇腾深度合作,将现有的深度学习模型全移至昇思MindSpore框架下,实现全栈可控。 AI推动产业发展-基于人工智能的技术分享西安交通大学软件学院博士生导师柯炜分享了题为《AI推动产业发展-基于人工智能的技术分享》,阐述了产业AI化的演变进程,在智能化时代,AI渗透到生产生活的各个领域,在推动产业升级方面发挥了重要作用,通过大数据、人工智能、云计算等新一代ICT技术,赋能千行百业智能化转型。 昇思MindindSpore开源社区介绍华为计算开源高级软件工程师姜逸坤介绍了MindSpore开源社区,MindSpore是华为公司推出的新一代开源深度学习框架,帮助人工智能软硬件应用生态繁荣发展,赋能开发者昇腾万里。昇思MindSpore定位为面向万物智能时代覆盖端、边、云的全场景AI框架,具有全场景协同、全流程极简、自适应演进三大特点;旨在通过自主可控的技术,打造中国AI产业发展的黑土地,为中国AI技术和产业发展保驾护航。开源以来,我们已经在产学研得到了广泛的应用,也结交了很多优秀的合作伙伴;产业上:MindSpore已经在终端、云、AI计算中心、工业制造、金融等行业得到了广泛应用。在华为内部支持了HMS和HarmonyOS的内置AI引擎,覆盖了手机、智能手表、大屏、车等设备;其也被集成在华为云ModelArts中,提供公有云服务。对外,MindSpore应用在鹏城、武汉、西安等AI计算中心,使用率超过80%。在制造行业,基于MindSpore +昇腾的全栈智造质检解决方案,其促进了质检部署周期缩短,精度大幅度提升;金融行业,MindSpore与国内头部银行合作,将AI应用到了理财、风控等系统中。学术上:我们在包括清华北大在内的超过100所国内重点高校开课,并且在21年,有超过230篇AI领域的顶会论文是基于MindSpore研究和发表的。截止目前,MindSpore社区累计下载量已超过86万,并已经有了4000+的社区贡献者。昇思MindindSpore开发经验及案例分享西安电子科技大学田帅带来了MindSpore开发经验及案例分享,从AI开发者亲身实践的角度分享了对于国产AI框架的使用体会:昇思MindSpore构建了最佳昇腾匹配、支持多处理器架构的开放 Al架构,能给开发者带来开发友好、运行高效、部署灵活的体验;原生支持AI大模型,并进行了全自动并行、可视化智能调优等关键创新,大大提升了AI模型的开发效率与效果;支持云边端全场景硬件和操作系统,让模型可以平滑跨平台应用,真正做到模型一次开发,全场景部署。由此,西安人工智能产业技术交流会暨MindSpore企业行活动成功举办。人工智能赋能千行百业需要产业各方的共同努力,昇腾将继续携手合作伙伴,做好产、学、研的对接,深入行业细分场景,打造具备影响力的人工智能应用解决方案,共同推动AI产业的繁荣发展。欢迎投稿欢迎大家踊跃投稿,有想投稿技术干货、项目经验等分享的同学,可以添加MindSpore官方小助手:小猫子(mindspore0328)的微信,告诉猫哥哦!昇思MindSpore官方交流QQ群 : 486831414(群里有很多技术大咖助力答疑!)
  • [其他干货] 大咖讲 | 最前沿的昇思MindSpore开源社区运营的经验分享,快拿出小本本记录呀!
    2021年Linux基金会北美开源峰会的主旨演讲中,我们为大家分享了关于昇思MindSpore开源社区的运营经验。 此次演讲涵盖了如何快速吸引中国开发者等重要话题,以及如何组织以开发者为中心的活动,如何利用各种开源工具构建社区基础设施,如何在主要开源社区之间建立更广泛的合作等精彩内容。下面我们将此次演讲材料分享给大家,便于大家学习交流,干货满满,请收藏! 1精彩视频回放回放视频链接: https://www.bilibili.com/video/BV1tL411M7sg?spm_id_from=333.999.0.0 2材料获取下滑直接查看课程材料,完整材料获取请:后台回复“社区运营”获取PDF版本
  • [公告] 获奖名单公布 | 昇思MindSpore开发者调试调优WorkShop高能干货回顾!
    1内容回顾2021年11月20日晚,我们举办了昇思MindSpore开发者调试调优线上WorkShop,昇思MindSpore团队的3位专家和浙江工业大学的4位优秀开发者通过腾讯会议和B站直播给近千位线上的小孢子们带来了满满的干货分享。 会议开始,来自MindSpore团队的前端专家Zherui给大家介绍了MindSpore前端接口使用过程中的常见问题和解决途径,给各位小孢子们提供了更加开阔的求助视野和求解思路;接着MindSpore后端专家Zhaoju和Mingqi由浅入深地介绍了MindSpore图编译的过程原理以及后端代码报错的高效定位方法,大家直呼干货!在会议后半段,来自浙江工业大学的裘坤锋、庞宇超等4位同学向大家分享了模型性能调优的案例和数据算子开发的经验。他们的详细分享和优秀的开发成果不仅让各位开发者学到了很多调试开发技巧,还增长了大家用好MindSpore的信心。我们也希望以后有越来越多的优秀开发者主动报名分享自己使用MindSpore的经验,和大家一起交流提升!2会议分享资料获取应各位开发者的请求和分享者的同意,我们把这次会议的相关干货分享给大家:1、会议回放:https://www.bilibili.com/video/BV1CM4y1P7iQ?spm_id_from=333.999.0.02、《RetinaFace_ResNet50模型性能调优》技术帖:https://bbs.huaweicloud.com/forum/forum.php?mod=viewthread&tid=154070&ordertype=2&page=13、《MindSpore数据处理算子开发》材料:后台回复“数据处理”获取课程材料3获奖名单为了鼓励和感谢各位小孢子们的互动参与和反馈问卷填写,我们给以下朋友们准备了MindSpore专属纪念品,请获奖朋友发送账号昵称截图+收获地址和联系方式给MindSpore公众号,我们会把奖品邮寄到您的手中。 4致谢&分享邀请再次感谢浙江工业大学网络空间安全研究院IVSN团队的裘坤锋同学以及浙江工业大学智能计算研究所的庞宇超、张炼、高良煜等三位同学的精彩分享!通过会议后的问卷收集,我们得知开发者们希望在下一次分享会上讨论以下内容:1、将TensorFlow或者PyTorch框架下的模型迁移复现到MindSpore框架的案例;2、MindSpore代码解读;3,MindSpore底层的优化策略;4、以性能提升为目标的网络模型参数处理,包括剪枝量化等压缩技术的应用;5、分布式、多卡的训练技巧。如果您有上述相关的开发经验,欢迎私信MindSpore公众号报名分享,我们有好礼相赠哦!欢迎投稿欢迎大家踊跃投稿,有想投稿技术干货、项目经验等分享的同学,可以添加MindSpore官方小助手:小猫子(mindspore0328)的微信,告诉猫哥哦!昇思MindSpore官方交流QQ群 : 486831414(群里有很多技术大咖助力答疑!)
  • [特性分析] 干货课程 | 最火热的AI+量子计算开源项目MindSpore Quantum公开课回顾(附视频)
    1培训整体介绍QWorld量子计算基础编程培训活动由中国科学技术大学主办,开源组织QWorld、MindSpore及HiQ量子计算团队联合举办。此次培训是QWorld在中国首次举办、也是第一次使用Bronze-ProjectQ的培训。中国科学技术大学负责学员报名和培训支撑工作,共邀请196名符合要求的学员参加。整个培训共六次课程,持续三周,每周两次。前面五次培训采用全英文线上教学,每位学员不仅要参加在线课程学习,还要完成五项课后作业,并通过QWorld的Canvas系统提交作业和查询分数。培训最后一天的特别讲座是由MindQuantum团队的专家——徐旭升博士带来精彩的量子计算实操课程讲解。MindQuantum是基于昇思MindSpore开源深度学习框架和HiQ量子计算云平台开发的通用量子计算框架,支持多种量子神经网络的训练和推理。2培训日程和课程视频在线欢迎会1场,在线讲座5场,HiQ量子计算在线研讨会1场 10 月 15 日 18:30-19:00 | 欢迎会https://www.bilibili.com/video/BV13L411G7PQ/10 月 15 日 19:00-20:00 | 第一讲:经典系统基础https://www.bilibili.com/video/BV13L411G7PQ/10 月 16 日 19:00-20:00 | 第二讲:量子系统基础https://www.bilibili.com/video/BV1N44y147xn/10 月 22 日 19:00-20:00 | 第三讲:作用在量子比特上的量子算符https://www.bilibili.com/video/BV19R4y1J7uJ10 月 23 日 19:00-20:00 | 第四讲:纠缠和基础量子协https://www.bilibili.com/video/BV1DT4y1R7jK/10 月 29 日 19:00-20:00 | 第五讲:Grover 搜索算https://www.bilibili.com/video/BV17U4y1c7fj/10 月 30 日 19:00-21:00 | HiQ量子计算“MindQuantum”讲座https://www.bilibili.com/video/BV1q44y1i76z/3培训团队组织者: Abuzer Yakaryilmaz(QWorld)和苏兆锋副研究员(USTC)负责人: Abuzer Yakaryilmaz量子计算讲师:徐旭升博士助教:Vishal Bajpe、Marija Šćekić、Claudia Zendejas-Morales  (QWorld)、姜业东、刘佳薇、陈泓霖(USTC)4培训证书本次培训共有196人通过报名审核,95名同学完成了作业,其中92名同学成功获得QBronze培训证书。在这里恭喜顺利毕业的同学们!5培训反馈培训结束后,收到了多名参与者的好评和反馈意见,以下是部分反馈:1)  “我希望能举办更多这样的活动。这门课不仅让我对量子计算有了更深的了解,也让我对量子科学产生了浓厚的兴趣。就连我的研究生都决定转学了,哈哈哈,这也让我找到了最初对世界的兴奋,对新领域的认识和未完成事业的发展。这门课点燃了我对知识的渴望和对量子科学的热爱,谢谢!”2)  “课程难度适中,测试非常有效,教授有独特的视角,讲课生动有趣。这甚至让我想转专业,专攻量子计算和量子元件。”3)“教程很有帮助。老实说,有时候我跟不上教授的进度,所以我下课后查看了辅导课。”4)  “ProjectQ Python笔记本玩起来很有趣。”5)  “我很感激你给我们提供了一个学习量子系统等的机会,否则我可能没有办法学习它们。”6)  “这对我来说是一次很好的经验,也很有用,希望你们能继续举办这样的讲座。”7)  “我认为这门课很有挑战性,也很有回报。”8)  “这是我第一次参加国外的网络直播讲座。这很有趣,也很有创意。”通过本次QWorld量子计算基础编程培训,我们希望能帮助更多的学生来学习量子计算的相关知识,也能够吸引高校师生了解并参与到MindQuantum开源项目的建设中,为量子计算事业发展培养人才,为国家新一代技术建设贡献自己的力量。我们将启动更多的培训课程和活动,欢迎各大高校与MindQuantum团队开展合作,联系邮箱:hiqinfo1@huawei.com附录………………………………………………………………………………………Bronze介绍 Bronze 是 QWorld 在2018年10月创建的关于量子计算和编程的入门教程名字。它是 Jupyter Notebook 的集合,每个 Notebook 都有很多编程任务以提供实践体验。Bronze 的本质是提供一个类似实验室的环境,人们可以通过实践学习量子计算和量子编程的基础知识。作为一种教学策略,Bronze跳过使用复数,以使新手的教程更简单。Bronze有五个主要部分: 1. 经典系统的基础知识(概率比特、抛硬币、有偏硬币、概率状态和概率算子、相关性)。2. 量子系统的基础知识(基于线路的量子程序:寄存器、量子门、测量、线路执行和结果读取、量子态和算子)。3. 量子比特上的量子算子与量子层析。4. 纠缠和基本量子协议(超密集编码和量子隐形传态)。5. 量子搜索算法。到 2021 年 11 月,Bronze已在 26 个国家的近70场研讨会中使用,颁发了近3000份毕业证书。活动列表请访问https://qworld.net/workshop-bronze/Bronze-ProjectQ介绍Bronze-ProjectQ 是使用 ProjectQ 作为量子编程框架的 Bronze 版本。2021年10月发布:https://gitlab.com/qworld/bronze-projectq欢迎投稿欢迎大家踊跃投稿,有想投稿技术干货、项目经验等分享的同学,可以添加MindSpore官方小助手:小猫子(mindspore0328)的微信,告诉猫哥哦!昇思MindSpore官方交流QQ群 : 486831414(群里有很多技术大咖助力答疑!)
  • [公告] 启智与昇思的开源力量:TCL工业研究院基于MindSpore实现工业AI算法库READ
    1. READ项目工业AI是智能制造的一个重要发展方向,有望能有效地推动生产力的发展,也是未来国家间竞争的关键。 工业质检是工业生产中最重要的环节之一,也是工业转型升级的重要突破口。传统工业质检依靠人力,不仅效率低、出错率高,而且人力成本高,人员易流失。基于AI的工业视觉检测是工业AI的一个重要的内容,主要针对工业生产中的各种产品的进行品质监控,筛选有缺陷的产品。然而,在TCL自身的工业AI视觉实践中,我们发现由于工业生产场景自身的特点,缺陷检测任务经常缺乏足够的异常样本用作训练。因此,在工业质检领域,基于正常样本的弱监督/自监督/无监督算法有着相当重要的价值,甚至在一定程度上可以帮助AI算法在工业领域突破大规模应用的红线。针对以上的问题,无监督缺陷检测算法在学术界获得了极大的关注同时涌现了大批先进的算法。无监督缺陷检测可以在仅仅使用少量正常样本训练的情况下完成缺陷定位及异常检测的任务。然而,工业视觉领域并不是一个非常开放的领域,社区也不是很活跃,缺乏优秀的开源项目。因此,为了推动无监督异常检测算法在工业视觉领域的应用和研究,在对无监督异常检测进行了大量的创新与实践之后,TCL工业研究院将自己的实践总结成了READ算法库,并启动了READ项目,旨在为工业检测领域提供一个无监督异常检测的框架。READ专注于研发与集成基于无监督监督学习的大规模异常检测算法和模型,重点解决工业质检中小样本和数据长尾问题,通过针对不同行业的业务和数据特点,研发可在无异常(无缺陷)图像上进行自学习和自训练的异常检测技术。未来,READ项目将搭建工业级别的开源数据库和技术生态平台,寻找更加鲁棒的和自动化的自监督训练方法,建立工业异常检测的标准化流程及评测指标,提升工业异常检测技术的性能和跨行业扩展性。Read(Reconstruction or Embedding based Anomaly Detection)项目作为第一个工业视觉无监督异常检测框架,目前已经集成了许多学术界前沿的优秀的无监督异常检测算法,可以在仅使用少量正常样本训练的情况下完成缺陷定位及异常检测的任务。主要涉及到的技术有迁移学习、表征学习、Transformer、标准化流、统计分布、无监督学习、弱监督学习等计算机视觉前沿技术。READ提供两个主要功能:1)用于实现新的异常检测算法的接口;2)用于封装各种异常检测任务的模板。考虑到使用的开发便利,READ框架架构简洁,使用一个统一的架构将全部的算法串接起来,代码模块化,可以使用简单通用的接口调用使用者需求的算法模型,更易调用和阅读。在精度层面,实现了大量sota算法,并保证实现的精度与原作的精度一致。READ框架具有的主要优势有以下三点:算法丰富、开箱即用、精度保证。READ同时支持PyTorch和昇思MindSpore框架的算法训练,适应了不同开发者的多种部署需求,在追求快速落地的同时又满足部分开发者将模型迁移至国产框架上的需求。昇思MindSpore版本链接:https://git.openi.org.cn/OpenI/READ_mindspore相关统计数据显示,中国每天在产线上进行目视检查的工人超过350万,其中仅3C行业就超过了150万人。这些质检人员每天都要花费大量的时间去判断工业零件的质量,不但有害员工视力,还会存在速度和稳定性差等问题,对检测效率和质量造成影响。同时,传统的工业质检方法是通过实验,人工用放大镜、显微镜等多种工具选取亮度、颜色、尺寸、形状等特征及其参数来设计判决规则,仅可判别定量缺陷检测、无法自适应,泛用性低,并且人工成本高。2. 开发昇思MindSpore版本的初衷接触到昇思MindSpore的契机是在港研所领导的推荐下,我们的开源项目在启智社区通过立项并且成功开源,在跟启智社区进行更加深入的合作之后,我们开始了解到了鹏城实验室的云脑计算资源、华为的昇腾设备和昇思MindSpore框架。在了解到华为为了达成全栈AI所进行的努力,并且已经为社区准备了相当完善的软硬件工具之后,我们的团队成员一致觉得我们需要使用华为的昇腾设备和昇思MindSpore框架来开发我们的项目。我们公司也希望能和多家公司机构合作,能促进共赢发展。从长远的角度出发,我们是为工业界产品服务,考虑到工厂的利益,我们选择国产的框架相对业界主流的国外研发的框架更加稳妥。考虑到近些年国际形势的不稳定,业界和学术界使用的一些开发平台和框架由于版权问题,被外国机构勒令禁止使用,严重影响和制约了我国制造业的发展。所以我们希望能在自己民族企业开发的框架上面开源我的项目。企业在使用我们开源项目的产品时,不用担心受到国外制裁的威胁,能够稳步的向前发展。在时代潮流之下,我国推崇民族企业,无论是产品还是技术,民之所向更坚定支持国产的产品。华为是可信任的民族品牌,作为制造业民族品牌的我们也希望华为开发的昇思MindSpore的AI框架能够在国内外企业间遍布通用,使中国的产业能在未来推广至全世界。综上所述,我们选择开发一套基于昇思MindSpore框架的开源项目,使华为和我们公司双方都能够从中获得更大的利益,共同保障我国在全球制造业智能化转型上的领先地位。3. 团队介绍我们的团队隶属于TCL工业研究院-香港研究所,TCL工业研究院是TCL集团的顶级R&D部门,主要聚焦聚焦人工智能及大数据、新型半导体显示技术和材料、智能制造和工业互联网、5G应用四大核心技术,专注于前沿科技的储备与探索,为TCL成员企业提供前瞻性的技术支持。TCL工业研究院-香港研究所的主要研究方向主要是在大数据、人工智能、AIOT等,而我们团队在港研所内主要从事AI在工业视觉领域的研究与落地工作,在工业视觉缺陷检测领域拥有多年的研究经历,深耕视觉和深度学习算法开发业务,在3C电子、半导体显示、汽车等行业都有AI算法的工厂落地的经验。团队成员都参与了TCL华星光电的ADC(人工智能自动缺陷分类系统)项目,ADC系统是国内半导体显示行业第一个真正落地的人工智能应用。ADC系统利用大数据、AI深度学习、机器视觉等最新技术,将产品图像与已知缺陷图像库进行比对,通过先进的算法模型,智能检测缺陷种类,自动分析异常并给出解决方案。通过该系统与现有检验流程的集成,还能够迅速启动和运行该解决方案。ADC应用每年可为TCL华星光电综合效益提升1500万元。TCL集团2020年研发投入85亿元人民币,累计专申请77600多件,TCL工业研究院工程师总数:350人TCL工业研究院-香港研究所2020年AI工程师总数49人+20人实习生团队张潮(帝国理工大学博士,项目组主要负责人之一)TCL工业研究院(香港)AI资深专家,主要致力于人工智能在工业检测与智能制造领域的落地和应用。2012年于西安交通大学获取本科学位,分别在2014年与2018年于英国帝国理工学院获取硕士与博士学位。曾在华为2012实验室与博世人工智能中心担任计算机视觉科学家,期间主导了多个基于AI的异常检测/缺陷识别系统的应用研发及落地。入职TCL后,负责缺陷检测的前沿研究工作与AI视觉系统在TCL工厂的落地应用。唐高杨(项目的负责人之一)TCL工业研究院(香港)AI高级工程师,主要负责基于深度学习的视觉落地项目。2018年于深圳大学计算机与软件学院获取硕士学位。曾在联想香港创投研究院和探智立方北京公司担任深度学习研究员,期间参与多个AI视觉落地项目及深度学习平台开发。入职TCL后参与多个AI视觉工业质检落地项目以及该领域的前沿技术探索。杨捷文 (项目组成员)TCL工业研究院(香港)算法工程师,主要负责人工智能在视频语义理解以及图像语义理解在智能产品上的应用研究与落地。2018年于华南师范大学获得本科学位,于2020年于英国卡迪夫大学获得硕士学位。在TCL任职期间完成了负责了多个项目的AI模型落地,擅长AI模型轻量化设计并能够完成AI模型在低算力设别上的部署和搭建;目前主要负责具体任务(手势,行为识别)的视频语义理解项目的研究以及相关项目。刘军 (项目组成员)TCL工业研究院(香港)资深算法工程师,主要致力于单目深度估计、物体检测以及图像质量评估的应用和落地。2012年于北京理工大学获取本科学位,随后保送本校攻读硕士以及博士学位。曾在深圳大学信息工程学院博士后流动站工作,期间发表中科院1区和2区论文各一篇。入职TCL后,负责的深度估计、图像检测的前沿研究工作,同时从事网络搜索NAS相关方面的技术落地。READ团队还有多名实习生:宁锦来、陈大鹏、刘兰、莫承见4. 开发过程中的心酸喜乐唐高杨:“开发过程是漫长艰辛的,也是困难重重,主要是昇思MindSpore框架还没有稳定下来,我们的算法里面包含很多自定义的或者相对复杂的算子计算API,昇思MindSpore有些还没有实现到位,我们需要自己去“拓荒”,这个过程耗时耗力,往往还会遇到不少问题。开心的是,昇思MindSpore工作人员比较积极配合帮助,在昇思MindSpore和我们的共同努力下,双方都互利共赢,我们算法实现了,昇思MindSpore也加入更新了很多算子,更新速度也比较快。”杨捷文:“从刚开始的欣喜若狂到后面的逐渐平静,开发过程大部分时间是枯燥乏味的。开发昇思MindSpore版本对于我来说就像在一片混沌中寻找光明,因为它没有前车之鉴,需要我们自己去寻找其中的玄机,我在黑暗中慢慢摸索,困难重重。幸运的是,经过不断努力,我们成功了,尽管过程不是那么让人愿意回味,但是不置可否,昇思MindSpore给我们带来了惊喜。”张潮:“开发过程中的心酸主要是两方面的:一个是算法本身,另外一个就是框架了,哈哈。算法方面呢,我们设计的无监督异常检测需要在只有少量正常图片训练的情况下,完成异常检测和缺陷分割两个任务,在没有强监督的情况下完成这个任务确实不简单。现有的sota算法有基于传统算法的,基于CNN的,基于Transformer的,基于normalizing flow的,五花八门包罗万象,可以说是深度学习领域的万花筒了,我们团队在开发的时候经常需要像学生时代那样对着论文一句一句过,查漏补缺,基本上大部分主流的模型架构都重新熟悉了一遍。框架方面呢,由于团队成员一开始都是习惯使用的TensorFlow/PyTorch,对于MindSpore并不熟悉,同时由于昇思MindSpore还在快速发展时期,有时候我们需要从头实现一些函数,但是由于Mindspore的开源项目暂时也不是很多,所以我们可以借鉴的代码也比较少,因此有时候大量翻阅MindSpore的API文档也是家常便饭的事情。当然了,做READ项目本身还是一个充满乐趣的事情。对我个人而言,做开源项目最大的收获是获得对于很多的算法更深的理解,同时也确确实实地在社区里留下了自己的东西。”5. 下一步工作下一步我们会继续探索相关的算法,实现更多效果更好的工业视觉缺陷检测领域的算法,并开源到我们的READ上面去,两个版本的框架算法都会进行不断的更新完善,以便为广大的同行开发者服务。同时我们希望跟华为昇思MindSpore有更深一步的合作,互利共赢,我们在实现算法完善开发的同时,也能帮助MindSpore提供更多有帮助性的用户体验意见,也希望华为提供更多的资源,我们也会多根据不同的底层框架设计不同的开发模式,让算法的效率更高,鲁棒性更强,共同推动双方的项目产品能在业界里深根发芽。再往后的一步,我们希望我们的算法在三个平台(产业、科研、教学)都能有更全面的发展,我们除了希望我们的框架算法能帮助工业界更多的企业外,在教学平台这块,我们希望能够和更多高校和教育机构深度合作,为其提供更多最新且优质的算法供更多学者了解这个领域,领入并从事工业视觉检测领域,更进一步推动工业落地。同时提供完善的科研平台供科研工作者能花更少的时间和精力,使用我们的框架孕育出更多帮助工业视觉缺陷检测领域更具突破性的创新。我们的理想是能够为推动全人类工业制造4.0智能化发展贡献力量。同时,随着近来视觉大模型和对比自监督训练方法的快速发展,也给计算机视觉领域带来了新的发展方面。现阶段的视觉大模型主要是针对自然图像的情况,对于工业领域的并没有进行相应的优化。未来,READ也希望能够加入更加适应于工业领域的对比自监督与视觉大模型的算法,促进工业视觉领域更加快速的发展。欢迎投稿欢迎大家踊跃投稿,有想投稿技术干货、项目经验等分享的同学,可以添加MindSpore官方小助手:小猫子(mindspore0328)的微信,告诉猫哥哦!昇思MindSpore官方交流QQ群 : 486831414(群里有很多技术大咖助力答疑!)
  • [公告] 2021年度中国人工智能学会-华为昇思MindSpore学术奖励基金入选名单正式出炉!
    《中国人工智能学会-华为昇思MindSpore学术奖励基金》是由中国人工智能学会和华为技术有限公司共同发起,面向高校及科研院所的AI科研人员搭建学术交流平台,提供经费、算力、技术支持等服务,推动昇思MindSpore在AI领域科研的应用,并支持基于昇思MindSpore框架的国际国内高水平会议和期刊的学术论文发表,激励原创性科学研究开展,构建中国人工智能科学研究的全球影响力。今年9月1日,学会发布第二期基金项目申报通知,由于项目申报踊跃学会于10月20日发布追加项目通知。本次评选共收到来自99个单位的224份申报项目。经资格审核、36位人工智能领域专家进行项目初评,13位专家进行项目终评,入选名单正式揭晓。本年度共有63个项目入选A类奖励基金名单,20个项目入选B类奖励基金名单。第二届中国人工智能学会-华为MindSpore学术奖励基金入选名单MindSpore官方资料GitHub : https://github.com/mindspore-ai/mindsporeGitee : https : //gitee.com/mindspore/mindspore官方QQ群 : 486831414