forked from chenzomi12/AISystem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path03.srt
1568 lines (1176 loc) · 25.6 KB
/
03.srt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1
00:00:00,000 --> 00:00:04,560
字幕生成:qiaokai 字幕校对:A是传奇
2
00:00:04,560 --> 00:00:07,120
诶,诶哟,已经开始了
3
00:00:07,120 --> 00:00:09,000
大家好,我是ZOMI
4
00:00:09,000 --> 00:00:13,280
今天还是模型转换和优化的系列里面
5
00:00:13,280 --> 00:00:18,040
今天主要给大家介绍的一个内容是模型转换的技术细节
6
00:00:18,040 --> 00:00:20,554
就真正的来到模型转换怎么转
7
00:00:20,554 --> 00:00:22,554
应该怎么去定义自己的计算图
8
00:00:23,200 --> 00:00:27,720
之前有很多好朋友建议ZOMI去讲一些具体的代码
9
00:00:27,720 --> 00:00:28,960
不要讲太虚的东西
10
00:00:28,960 --> 00:00:32,560
但是ZOMI还是觉得也一定要跳出具体的代码
11
00:00:32,560 --> 00:00:34,000
跳出具体的工程
12
00:00:34,000 --> 00:00:37,200
跳出具体每天编码的事情来看一看
13
00:00:37,200 --> 00:00:38,600
看一看整体的原理
14
00:00:38,600 --> 00:00:40,000
看一看整体的架构
15
00:00:40,000 --> 00:00:40,920
去了解一下
16
00:00:40,920 --> 00:00:42,400
看一下不同的AI框架
17
00:00:42,400 --> 00:00:43,680
不同的AI编译器
18
00:00:43,680 --> 00:00:44,920
不同的推理引擎
19
00:00:44,920 --> 00:00:47,360
他整体上面有什么差异
20
00:00:47,360 --> 00:00:50,880
它使用不同的文件格式有什么不一样的地方
21
00:00:50,880 --> 00:00:51,840
每一个模块
22
00:00:51,840 --> 00:00:52,600
每一个流程
23
00:00:52,600 --> 00:00:53,440
每一个细节
24
00:00:53,440 --> 00:00:55,560
都应该知道
25
00:00:55,560 --> 00:00:59,360
只有这样才能够称为自己是一个AI系统的专家
26
00:01:00,480 --> 00:01:03,400
而不是像我以前聚焦于某一个特性
27
00:01:03,400 --> 00:01:05,320
你们知道这个特性应该怎么写
28
00:01:05,320 --> 00:01:06,920
这代码我能讲得很明白
29
00:01:06,920 --> 00:01:09,400
而且我可以给你讲代码讲两三个小时
30
00:01:09,400 --> 00:01:11,080
但是我那个时候还做不到
31
00:01:11,080 --> 00:01:13,240
我能够跳出这个特性出来
32
00:01:13,240 --> 00:01:15,560
去看一看这个特性跟其他特性
33
00:01:15,560 --> 00:01:17,520
看看整体有什么区别
34
00:01:17,520 --> 00:01:19,560
这也是我希望给大家去汇报
35
00:01:19,560 --> 00:01:22,200
或者给大家去掌握的一个思想
36
00:01:23,520 --> 00:01:24,600
其实在上一节课
37
00:01:24,640 --> 00:01:28,600
了解了一下模型转换的一个具体的格式
38
00:01:28,600 --> 00:01:29,720
还有相关的内容
39
00:01:30,400 --> 00:01:32,080
今天很重要的一个内容
40
00:01:32,080 --> 00:01:34,520
就是了解一下怎么自定义一个计算图
41
00:01:34,520 --> 00:01:36,600
还有转换的流程和细节
42
00:01:37,880 --> 00:01:39,960
下面来看一下计算图的回顾
43
00:01:40,160 --> 00:01:41,880
既然谈到计算图
44
00:01:41,880 --> 00:01:44,960
肯定需要去回顾一下什么是计算图
45
00:01:46,400 --> 00:01:47,760
ZOMI老师你好
46
00:01:48,600 --> 00:01:50,520
你说要讲计算图
47
00:01:50,520 --> 00:01:52,000
但是我想问一下
48
00:01:52,120 --> 00:01:55,160
为什么推理引擎需要自定义计算图呢
49
00:01:56,640 --> 00:01:58,720
小心又来了一个灵魂问题
50
00:01:59,640 --> 00:02:02,120
可以看到在整个转换模块架构里面
51
00:02:02,120 --> 00:02:04,400
它分为一个转换模块
52
00:02:04,400 --> 00:02:05,880
还有图优化
53
00:02:05,880 --> 00:02:09,360
中间是有一个IR或者计算图来去承载的
54
00:02:09,360 --> 00:02:11,200
会把不同的AI框架
55
00:02:11,200 --> 00:02:13,000
去对接到同一个IR
56
00:02:13,000 --> 00:02:14,360
有了这个IR之后
57
00:02:14,360 --> 00:02:16,680
就可以很方便的做一些
58
00:02:16,680 --> 00:02:19,280
很多的不同的图优化的工作
59
00:02:19,280 --> 00:02:20,640
那这些图优化的工作
60
00:02:20,640 --> 00:02:22,800
都是基于一个很重要的概念
61
00:02:22,800 --> 00:02:23,920
就是计算图
62
00:02:23,920 --> 00:02:26,800
所以说不管是推理引擎也好
63
00:02:26,800 --> 00:02:27,920
AI训练框架也好
64
00:02:27,920 --> 00:02:29,720
计算图这个概念
65
00:02:29,720 --> 00:02:31,440
还是非常的重要
66
00:02:31,440 --> 00:02:34,280
于是ZOMI在之前AI框架的分享里面
67
00:02:34,440 --> 00:02:36,560
就有一个非常详细的系列了
68
00:02:36,560 --> 00:02:39,520
去独立的把计算图每一个模块
69
00:02:39,520 --> 00:02:42,920
都展开的去详细的给大家去汇报的
70
00:02:44,440 --> 00:02:47,960
下面看一下计算图的一个基本的组成
71
00:02:48,040 --> 00:02:49,360
这个也是AI框架
72
00:02:49,400 --> 00:02:51,920
不管现在是AI框架还是推理引擎
73
00:02:52,160 --> 00:02:53,680
它的基本组成都是不变的
74
00:02:53,680 --> 00:02:57,080
因为前提的出于是计算图
75
00:02:57,680 --> 00:02:59,680
现在看一下计算图的具体的组成
76
00:02:59,680 --> 00:03:00,640
有两个
77
00:03:00,640 --> 00:03:01,960
一个是张量
78
00:03:01,960 --> 00:03:03,880
一个是算子
79
00:03:04,280 --> 00:03:07,200
张量就是整个计算图去流传的数据
80
00:03:07,200 --> 00:03:09,040
或者计算图里面去计算的数据
81
00:03:09,040 --> 00:03:12,320
而算子就是具体的执行的单元
82
00:03:13,240 --> 00:03:14,240
ZOMI老师你好
83
00:03:14,720 --> 00:03:16,200
我又有个问题了
84
00:03:17,400 --> 00:03:18,200
你说
85
00:03:19,200 --> 00:03:20,800
AI框架的计算图
86
00:03:20,800 --> 00:03:23,600
和推理引擎的计算图有什么不同吗
87
00:03:24,760 --> 00:03:27,040
这个问题确实问的挺好的
88
00:03:27,040 --> 00:03:30,000
这也是我应该总结了好一段时间的
89
00:03:30,000 --> 00:03:32,120
这个表确实我总结了挺久的
90
00:03:32,120 --> 00:03:33,920
有十来分钟
91
00:03:34,480 --> 00:03:35,600
下面看一下
92
00:03:35,600 --> 00:03:36,760
AI框架计算图
93
00:03:36,760 --> 00:03:38,120
还有推理引擎的计算图
94
00:03:38,560 --> 00:03:40,280
对比了几个维度
95
00:03:40,280 --> 00:03:41,920
一个是它的一个组成
96
00:03:41,920 --> 00:03:43,080
接着是正反向
97
00:03:43,080 --> 00:03:43,880
动静态图
98
00:03:43,880 --> 00:03:44,840
还有分布式并行
99
00:03:44,840 --> 00:03:46,480
还有具体的使用场景
100
00:03:46,760 --> 00:03:48,320
可以看到计算图的组成
101
00:03:48,320 --> 00:03:49,560
AI框架的计算图
102
00:03:49,560 --> 00:03:50,880
和推理引擎的计算图
103
00:03:50,880 --> 00:03:52,080
其实是差不多的
104
00:03:52,080 --> 00:03:53,920
但是有一个很大的区别
105
00:03:53,920 --> 00:03:55,320
就是推理引擎更多的是
106
00:03:55,320 --> 00:03:56,920
聚焦于做一个forward
107
00:03:56,920 --> 00:03:58,120
前向的计算
108
00:03:58,120 --> 00:03:59,080
不需要backward
109
00:03:59,080 --> 00:04:00,680
就不需要有反向了
110
00:04:00,680 --> 00:04:02,400
而在动静态图里面
111
00:04:02,520 --> 00:04:03,360
确实AI框架
112
00:04:03,360 --> 00:04:05,040
它需要支持非常灵活的
113
00:04:05,040 --> 00:04:06,080
动态图的写法
114
00:04:06,080 --> 00:04:07,960
但是有时候在训练过程当中
115
00:04:07,960 --> 00:04:09,440
希望它越快越好
116
00:04:09,440 --> 00:04:11,280
于是会有一个动静转移
117
00:04:11,280 --> 00:04:12,160
或者动静统一
118
00:04:12,160 --> 00:04:14,520
或者动静态图都支持的情况
119
00:04:14,520 --> 00:04:15,320
而推理引擎
120
00:04:15,440 --> 00:04:17,480
大部分都是以静态图为主
121
00:04:17,760 --> 00:04:19,160
基本上在推理引擎
122
00:04:19,160 --> 00:04:20,520
不希望它是一个动态图
123
00:04:20,520 --> 00:04:22,360
动态图对推理引擎的
124
00:04:22,360 --> 00:04:23,320
时间的消耗
125
00:04:23,320 --> 00:04:24,760
对Runtime的调度
126
00:04:24,760 --> 00:04:25,880
还有Kernel的调度
127
00:04:25,880 --> 00:04:27,720
确实非常的不友好
128
00:04:28,240 --> 00:04:29,280
所以一般都会把它
129
00:04:29,280 --> 00:04:31,200
转为静态图去进行执行的话
130
00:04:31,200 --> 00:04:32,520
大家一定要注意这个点
131
00:04:32,520 --> 00:04:33,400
就是一个forward
132
00:04:33,400 --> 00:04:34,560
一个静态图
133
00:04:34,560 --> 00:04:36,040
接着分布式并行
134
00:04:36,040 --> 00:04:36,480
AI框架
135
00:04:36,480 --> 00:04:38,800
之前确实有三个系列
136
00:04:38,800 --> 00:04:40,880
去单独的去汇报了给大家
137
00:04:40,880 --> 00:04:42,040
AI框架的计算图
138
00:04:42,040 --> 00:04:43,520
到底是怎么样去切分的
139
00:04:43,520 --> 00:04:44,760
应该有哪些策略
140
00:04:44,880 --> 00:04:45,880
但是在推理引擎
141
00:04:45,880 --> 00:04:47,600
大部分都是以
142
00:04:47,600 --> 00:04:49,320
单卡的推理服务为主
143
00:04:49,320 --> 00:04:51,600
很少去考虑分布式的推理
144
00:04:51,600 --> 00:04:52,680
确实分布式的推理
145
00:04:52,680 --> 00:04:55,120
至少ZOMI在从业这么多年
146
00:04:55,120 --> 00:04:57,680
没有遇到过太多相关的工作
147
00:04:57,680 --> 00:04:58,240
有是有
148
00:04:58,240 --> 00:04:59,400
但是基本上很少
149
00:04:59,400 --> 00:05:00,160
很少客户
150
00:05:00,160 --> 00:05:01,720
大部分都是创新的场景
151
00:05:02,080 --> 00:05:03,720
最后一个就是看一下
152
00:05:03,720 --> 00:05:04,920
AI框架的计算图
153
00:05:05,040 --> 00:05:06,800
更多的是指训练的场景
154
00:05:06,800 --> 00:05:08,120
支持科研的创新
155
00:05:08,120 --> 00:05:09,880
对网络模型的训练的微调
156
00:05:09,960 --> 00:05:11,240
提升算法为主
157
00:05:11,240 --> 00:05:14,320
但是推理引擎确实它比较特别
158
00:05:14,320 --> 00:05:16,320
它的计算图主要是支持
159
00:05:16,320 --> 00:05:18,360
工业级的应用的部署
160
00:05:18,360 --> 00:05:19,440
对外提供服务
161
00:05:19,440 --> 00:05:22,200
所以说因为这些特殊的原因
162
00:05:22,200 --> 00:05:26,560
所以推理引擎有自己的计算图的定义
163
00:05:26,560 --> 00:05:27,920
当然它也可以复用
164
00:05:27,920 --> 00:05:29,760
AI框架计算图的定义
165
00:05:29,760 --> 00:05:32,320
这个也是MindSpore端营统一的一个概念
166
00:05:32,320 --> 00:05:34,040
废话就不多说了
167
00:05:34,040 --> 00:05:35,720
继续往下看一看
168
00:05:37,760 --> 00:05:39,040
接下来看一下
169
00:05:39,040 --> 00:05:41,480
推理引擎到底怎么样去定义
170
00:05:41,480 --> 00:05:42,440
一个计算图的
171
00:05:42,440 --> 00:05:43,760
计算图的最基本
172
00:05:43,760 --> 00:05:45,240
应该有哪些结构
173
00:05:45,240 --> 00:05:48,240
这里面我就会带着大家去看一看
174
00:05:48,240 --> 00:05:49,440
具体的代码
175
00:05:50,000 --> 00:05:51,680
下面来回顾一下
176
00:05:51,680 --> 00:05:52,560
重新回顾一下
177
00:05:52,560 --> 00:05:53,960
计算图有两个组成
178
00:05:53,960 --> 00:05:55,880
第一个就是张量 Tensor
179
00:05:55,880 --> 00:05:57,200
第二个就是Operation
180
00:05:57,200 --> 00:05:57,840
算子
181
00:05:57,840 --> 00:05:59,320
执行单元
182
00:05:59,720 --> 00:06:01,600
下面就不看slide了
183
00:06:01,600 --> 00:06:02,440
就不看PPT了
184
00:06:02,440 --> 00:06:04,240
而转到具体的代码
185
00:06:05,960 --> 00:06:07,520
原量ZOMI的鼠标
186
00:06:07,720 --> 00:06:09,080
一直都是比较大的
187
00:06:09,080 --> 00:06:10,760
我也被很多人吐槽过
188
00:06:10,760 --> 00:06:12,680
说我已经是老人眼了
189
00:06:12,800 --> 00:06:14,680
确实鼠标大一点好看了
190
00:06:14,680 --> 00:06:17,240
不要去看一看它
191
00:06:17,960 --> 00:06:20,520
我建议大家都把自己的鼠标调大一点
192
00:06:20,520 --> 00:06:22,320
确实很方便很舒服
193
00:06:22,320 --> 00:06:24,840
现在回到推理引擎计算图的
194
00:06:24,840 --> 00:06:26,840
一个Tensor张量的表示
195
00:06:26,840 --> 00:06:27,840
首先张量
196
00:06:27,840 --> 00:06:29,800
肯定要定义自己的数据结构
197
00:06:29,800 --> 00:06:31,720
证明推理引擎
198
00:06:31,720 --> 00:06:35,080
里面支持哪几种的数据的运行的方式
199
00:06:35,280 --> 00:06:36,560
一般都会定义
200
00:06:36,560 --> 00:06:38,240
Double,FLOAT,Int32
201
00:06:38,240 --> 00:06:40,360
这些跟传统的计算机没什么区别
202
00:06:40,360 --> 00:06:41,960
叫做Data Type
203
00:06:42,080 --> 00:06:43,920
接着要定义一个非常重要的内容
204
00:06:44,080 --> 00:06:46,240
就是数据的排布
205
00:06:46,920 --> 00:06:48,720
在AI编译器前端优化里面
206
00:06:48,840 --> 00:06:50,920
确实提到单独提到过
207
00:06:50,920 --> 00:06:51,920
数据的排布
208
00:06:51,920 --> 00:06:52,960
而且开了两节课
209
00:06:52,960 --> 00:06:55,320
去给大家去介绍了大概20分钟
210
00:06:55,320 --> 00:06:58,360
这里面包括NCHW,NHWC
211
00:06:58,360 --> 00:07:00,400
NCHWC0,ND
212
00:07:00,400 --> 00:07:01,360
不同的格式
213
00:07:01,480 --> 00:07:03,440
确实需要声明的
214
00:07:03,440 --> 00:07:04,600
就告诉AI框架
215
00:07:04,600 --> 00:07:05,720
或告诉算子
216
00:07:05,720 --> 00:07:09,160
我执行的到底是一个什么样的数据的排布
217
00:07:09,160 --> 00:07:10,440
有了这两个之后
218
00:07:10,640 --> 00:07:12,880
还要定义张量
219
00:07:13,080 --> 00:07:14,560
张量就会比较简单
220
00:07:14,560 --> 00:07:15,680
这里面的内容不太多
221
00:07:15,680 --> 00:07:17,280
第一个就是张量的DimS
222
00:07:17,280 --> 00:07:18,360
张量的Shape
223
00:07:18,360 --> 00:07:20,560
它到底是一个什么样的形态
224
00:07:20,560 --> 00:07:23,080
接着就会有一个Data Format
225
00:07:23,080 --> 00:07:25,840
Data Format就是刚才所定义的
226
00:07:25,840 --> 00:07:28,040
这个Data Format到底是NCHW
227
00:07:28,040 --> 00:07:29,360
还是NHWC
228
00:07:29,360 --> 00:07:30,600
另外还有Data Type
229
00:07:30,600 --> 00:07:32,080
Data Type就默认了
230
00:07:32,080 --> 00:07:34,160
你是使用Fp32,Fp16
231
00:07:34,160 --> 00:07:35,200
还是Int8
232
00:07:35,560 --> 00:07:37,760
通过这么简单的一个FBS
233
00:07:37,760 --> 00:07:39,080
就FlatBuffer的定义
234
00:07:39,320 --> 00:07:42,640
就完成了整个对张量的定义了
235
00:07:44,160 --> 00:07:46,040
下面就来看一看
236
00:07:46,040 --> 00:07:48,080
推理引擎里面对算子的定义
237
00:07:48,240 --> 00:07:48,920
算子定义
238
00:07:49,040 --> 00:07:51,440
同样去看看具体的代码
239
00:07:53,160 --> 00:07:55,560
算子的定义可能跟张量不太一样
240
00:07:55,560 --> 00:07:56,960
因为要对接到
241
00:07:56,960 --> 00:07:59,000
很多不同的AI框架里面
242
00:07:59,000 --> 00:08:00,200
同一个算子
243
00:08:00,200 --> 00:08:01,280
Pytorch的定义
244
00:08:01,280 --> 00:08:03,240
可能和TensorFlow的定义不太一样
245
00:08:03,240 --> 00:08:05,080
也有可能跟MindSpore
246
00:08:05,080 --> 00:08:07,200
三个AI框架的定义都不太一样
247
00:08:07,720 --> 00:08:09,120
所以在推理引擎里面
248
00:08:09,280 --> 00:08:10,400
对于每一个算子
249
00:08:10,560 --> 00:08:12,160
都需要有一个独立的定义
250
00:08:12,160 --> 00:08:13,600
于是用table