forked from Infrasys-AI/AISystem
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path05.srt
More file actions
1424 lines (1068 loc) · 25.3 KB
/
05.srt
File metadata and controls
1424 lines (1068 loc) · 25.3 KB
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:05,131 --> 00:00:07,131
哈喽大家好,我是 ZOMI
2
00:00:07,131 --> 00:00:09,131
昨天录的太晚
3
00:00:09,131 --> 00:00:11,131
所以今天上班的时候
4
00:00:11,131 --> 00:00:13,131
经常在摸鱼
5
00:00:14,881 --> 00:00:15,881
废话不多说了
6
00:00:16,131 --> 00:00:18,131
来看看今天一个很重要的内容
7
00:00:18,131 --> 00:00:20,131
也是我觉得计算图里面
8
00:00:20,131 --> 00:00:22,131
除了自动微分之外
9
00:00:22,131 --> 00:00:24,131
第二个最重要的内容了
10
00:00:24,131 --> 00:00:26,131
就是控制流
11
00:00:27,131 --> 00:00:28,131
那控制流里面
12
00:00:28,131 --> 00:00:30,131
今天主要是讲几个概念
13
00:00:30,131 --> 00:00:32,131
第一个去看看什么是控制流
14
00:00:32,506 --> 00:00:34,506
控制流跟计算图是怎么表示的
15
00:00:34,506 --> 00:00:36,506
还有它们之间的关系
16
00:00:36,506 --> 00:00:38,506
接着去讲讲动态图
17
00:00:38,506 --> 00:00:40,506
引起的控制流的问题
18
00:00:40,506 --> 00:00:42,506
还有静态图跟控制流的关系
19
00:00:42,506 --> 00:00:44,506
最后看看
20
00:00:44,506 --> 00:00:46,506
现在经常去讲
21
00:00:46,506 --> 00:00:48,506
TensorFlow 也好,Pytorch 也好
22
00:00:48,506 --> 00:00:51,929
都会做一些动静统一的结合和技术
23
00:00:51,929 --> 00:00:53,929
它到底是个什么样子的
24
00:00:58,206 --> 00:01:01,206
其实深度学习它是一个可编程的系统
25
00:01:01,206 --> 00:01:03,206
或者叫做可编程的框架
26
00:01:03,206 --> 00:01:05,206
这个框架在设计的时候
27
00:01:05,206 --> 00:01:09,206
首先第一个就是希望能够让前端用户
28
00:01:09,206 --> 00:01:12,206
能够独立于后面的芯片使能
29
00:01:12,206 --> 00:01:14,206
让前端的用户不用感知
30
00:01:14,206 --> 00:01:16,206
底层的硬件的实现的细节
31
00:01:16,206 --> 00:01:20,206
然后用更贴近于神经网络的方式
32
00:01:20,206 --> 00:01:22,206
去实现他们想要的算法和任务
33
00:01:23,606 --> 00:01:25,606
为了解决这个问题
34
00:01:25,606 --> 00:01:28,606
AI 框架这里面就提出了一个统一的表示
35
00:01:28,606 --> 00:01:30,606
叫做计算图
36
00:01:30,606 --> 00:01:32,606
通过这个统一的描述
37
00:01:32,606 --> 00:01:34,606
可以帮助前端的用户
38
00:01:34,606 --> 00:01:38,606
在编程的时候更加灵活的去编写它的算法
39
00:01:38,606 --> 00:01:42,606
这个计算图也影响了后面的优化的方式
40
00:01:42,606 --> 00:01:44,606
还有整个系统如何进行扩展
41
00:01:44,606 --> 00:01:47,606
都是将神经网络的计算抽象成为一个
42
00:01:47,606 --> 00:01:50,606
由基本原语构成的有向无环图
43
00:01:50,606 --> 00:01:52,856
也就是叫做 DAG 图
44
00:01:53,381 --> 00:01:56,381
不过呢,随着深度学习网络的研究的发展
45
00:01:56,381 --> 00:01:59,381
特别是这几年呈现井喷式的发展
46
00:01:59,381 --> 00:02:02,381
迎来了 RNN, LSTM 的结构之后
47
00:02:02,381 --> 00:02:04,381
又迎来了 Transformer
48
00:02:04,381 --> 00:02:08,381
甚至最近的还有 GAN, Diffusion 这种网络模型
49
00:02:08,381 --> 00:02:10,381
出现这些网络模型
50
00:02:10,381 --> 00:02:13,381
就对 AI 框架引起了更大的挑战
51
00:02:13,381 --> 00:02:17,381
下面这段代码就是我从 Hungerface 里面去摘取的
52
00:02:17,381 --> 00:02:20,275
一个 Decision Transformer 里面的
53
00:02:20,275 --> 00:02:22,381
其中关于 Transformer 的一个结构
54
00:02:22,381 --> 00:02:25,381
可以看到 Transformer 里面的一个结构
55
00:02:25,381 --> 00:02:28,381
在 Forward 的阶段它有一个 if else
56
00:02:28,381 --> 00:02:30,381
然后还有一个 if
57
00:02:30,381 --> 00:02:34,381
这一些 if else, while 都是动态的一个控制流
58
00:02:34,381 --> 00:02:38,381
另外的话,在对 Transformer 进行堆叠的时候
59
00:02:38,381 --> 00:02:40,381
又引入了大量的 for 循环
60
00:02:40,381 --> 00:02:44,381
这个时候就对系统提出了非常大的挑战
61
00:02:44,381 --> 00:02:47,381
怎么样去更好地支持
62
00:02:47,381 --> 00:02:50,381
这个时候对 AI 框架和 AI 系统
63
00:02:50,381 --> 00:02:52,381
就提出了比较大的一个挑战
64
00:02:52,381 --> 00:02:56,381
怎么样去支持这些动态的控制流语句
65
00:02:58,381 --> 00:03:01,381
AI 框架为了更好地支持这些
66
00:03:01,381 --> 00:03:04,381
天生就含有控制流语句的神经网络模型
67
00:03:04,381 --> 00:03:08,381
于是就会不约而同的去对动态控制流
68
00:03:08,381 --> 00:03:11,381
引入了新的语言结构的支持
69
00:03:11,381 --> 00:03:14,381
现在在控制流的解决方案里面
70
00:03:14,381 --> 00:03:17,381
好几个框架其实都有自己的一套解决方案
71
00:03:17,381 --> 00:03:20,381
来看看现在主流的三种解决方案
72
00:03:20,381 --> 00:03:22,381
虽然现在的 AI 框架很多
73
00:03:22,381 --> 00:03:24,381
但是主要是集中这三种
74
00:03:24,381 --> 00:03:30,381
首先第一种就是后端对控制流语句进行原生的支持
75
00:03:30,381 --> 00:03:33,381
也就是支持控制流原生的算子和原语
76
00:03:33,381 --> 00:03:36,381
然后允许在计算图里面
77
00:03:36,381 --> 00:03:39,381
去有一些控制流或者数据流进行混合
78
00:03:39,381 --> 00:03:43,381
这种方式最典型的代表就是 TensorFlow
79
00:03:43,381 --> 00:03:46,381
第二种就是复用前端语言的控制流语句
80
00:03:46,381 --> 00:03:50,381
也就是我直接附用 Python 的控制流语句
81
00:03:50,381 --> 00:03:54,381
然后通过 Python 的语言去驱动后端的数据流图的执行
82
00:03:54,381 --> 00:03:57,381
这种最典型的方式就是 PyTorch
83
00:03:57,381 --> 00:04:00,381
另外第三种就是 MindSpore
84
00:04:00,381 --> 00:04:05,381
第三种就是后端对控制流的语言结构进行解析
85
00:04:05,381 --> 00:04:07,381
变成一个子图
86
00:04:07,381 --> 00:04:11,381
也就是通过原码表示的方式变成一个计算图
87
00:04:11,381 --> 00:04:14,381
这个最典型的代表就是 MindSpore
88
00:04:14,381 --> 00:04:19,381
然后 PyTorch 和 TensorFlow 最新的版本也开始慢慢的引入
89
00:04:25,381 --> 00:04:27,381
下面来打开看看第一种方式
90
00:04:27,381 --> 00:04:29,381
也就是典型的 TensorFlow 的方式
91
00:04:29,381 --> 00:04:34,381
它主要是向数据流图中添加一个控制流原语
92
00:04:34,381 --> 00:04:37,381
控制流原语主要是在这一层
93
00:04:37,381 --> 00:04:41,381
然后里面去提供一些底层的控制流原语
94
00:04:41,381 --> 00:04:47,381
Enter, Switch, Exist, Merge, Next, Iterator 一共是五个
95
00:04:47,381 --> 00:04:50,381
这种方式来看看它的特点
96
00:04:50,381 --> 00:04:52,381
先看完特点再解析那个图
97
00:04:52,381 --> 00:04:58,381
这种方式主要是采用声明式的编程去获得一个计算图
98
00:04:58,381 --> 00:05:02,381
在编译阶段对整个计算图进行全局的优化
99
00:05:02,381 --> 00:05:06,381
第二种它执行的时候就不需要在前端语言就是 Python
100
00:05:06,381 --> 00:05:10,381
还有后端的 OneTime 的时候反复的切换
101
00:05:10,381 --> 00:05:13,381
这个时候就可以有更高的执行效率
102
00:05:13,381 --> 00:05:16,381
把整个图都央到 OneTime 去执行
103
00:05:16,381 --> 00:05:20,381
这种方式就是控制流原语提供一个控制流原语
104
00:05:20,381 --> 00:05:25,381
把控制流原语作为语言的第一特性然后去执行的
105
00:05:25,381 --> 00:05:28,381
现在来看看下面的这个图
106
00:05:28,381 --> 00:05:30,381
首先我从上往下看
107
00:05:30,381 --> 00:05:33,381
上面就是计算图的 API
108
00:05:33,381 --> 00:05:35,381
也就是 TensorFlow 的一些 API
109
00:05:35,381 --> 00:05:39,381
TensorFlow 最基础的提供了 tf.while_loop
110
00:05:39,381 --> 00:05:41,381
还有 tf.condition 或 cond
111
00:05:41,381 --> 00:05:44,381
这两个操作 while_loop 就是 for 循环
112
00:05:44,381 --> 00:05:46,381
Condition 就是 if else 这种方式
113
00:05:46,381 --> 00:05:51,381
TensorFlow 发现这种方式可能用的不太好用
114
00:05:51,381 --> 00:05:54,381
于是它又提供了高层次的 API
115
00:05:54,381 --> 00:05:57,381
tf.map_fn, tf.case
116
00:05:57,381 --> 00:05:58,381
这两种方式
117
00:05:58,381 --> 00:06:02,381
但是 TF 出了名就是难用就是不好用
118
00:06:02,381 --> 00:06:04,381
谷歌为了解决这个问题
119
00:06:04,381 --> 00:06:08,381
然后又推出了另外一个更高级的 API
120
00:06:08,381 --> 00:06:11,381
这个 API 就是叫做 autograph
121
00:06:11,381 --> 00:06:16,381
通过 Python 控制流原码转换为一个最基本的控制流 API
122
00:06:16,381 --> 00:06:19,381
也就是通过刚才说的第三种方式
123
00:06:19,381 --> 00:06:21,381
原码转换的方式
124
00:06:21,381 --> 00:06:24,381
把它变成 tf.while_loop 和 tf.cond
125
00:06:24,381 --> 00:06:27,381
就是在里面自己写了些模板
126
00:06:27,381 --> 00:06:29,381
然后把这些模板套上来
127
00:06:29,381 --> 00:06:31,381
就是这么简单的一个工作
128
00:06:31,381 --> 00:06:33,381
它其实只是做了一个转换
129
00:06:33,381 --> 00:06:35,381
再往下层看一看
130
00:06:35,381 --> 00:06:37,381
刚才讲了
131
00:06:37,381 --> 00:06:41,381
计算图原语在 TensorFlow 里面就提供了几种原语
132
00:06:41,381 --> 00:06:45,381
这几种原语就是去组成 tf.while_loop 和 tf.cond 的
133
00:06:45,381 --> 00:06:48,381
就是把这几个简单的组合
134
00:06:48,381 --> 00:06:51,381
再往下就是图并优化层了
135
00:06:51,381 --> 00:06:55,381
对上面使用底层控制流语句构建好的图进行一些编译优化
136
00:06:55,381 --> 00:07:00,381
那图优化能看到的其实更多的是底层的一个控制流语句
137
00:07:00,381 --> 00:07:01,381
因为在做转换的时候
138
00:07:01,381 --> 00:07:04,381
它已经一步步的变成这个图了
139
00:07:07,381 --> 00:07:09,381
下面就是举一个简单的例子
140
00:07:09,381 --> 00:07:12,381
看一下 TensorFlow 里面具体是怎么实现的
141
00:07:12,381 --> 00:07:14,381
首先有一个例子
142
00:07:14,381 --> 00:07:18,381
就是两个嵌套循环的 for,for=0
143
00:07:18,381 --> 00:07:19,381
然后叠代到 10
144
00:07:19,381 --> 00:07:20,381
然后不断的去叠加
145
00:07:20,381 --> 00:07:23,381
那中间的某个计算就不展示出来了
146
00:07:23,381 --> 00:07:25,381
在 TensorFlow 2.0 里面
147
00:07:25,381 --> 00:07:28,381
它的使用方式其实是比较头痛的
148
00:07:28,381 --> 00:07:31,381
最后调用 while_loop 就两个 for
149
00:07:31,381 --> 00:07:35,381
把 ABCY 存起来就两个 for 嵌套循环
150
00:07:36,381 --> 00:07:38,381
上层的表达就是这样的
151
00:07:38,381 --> 00:07:42,381
但是底层怎么去记录怎么去实现呢
152
00:07:42,381 --> 00:07:46,381
首先在 TensorFlow 里面有 一个叫做执行增
153
00:07:46,381 --> 00:07:47,381
Execution Firm
154
00:07:47,381 --> 00:07:52,381
这个执行增具有全局唯一的名字作为标识符
155
00:07:52,381 --> 00:07:56,381
可以把它作为一个域或者 Scope 一个方式
156
00:07:56,381 --> 00:07:59,381
然后下面就有很多 key 和 value
157
00:07:59,381 --> 00:08:01,381
就有一些字典的方式
158
00:08:01,381 --> 00:08:05,381
字典存的就是算子还有算子对应的上下文
159
00:08:05,381 --> 00:08:07,381
包括它的输入数据的地址
160
00:08:07,381 --> 00:08:09,381
输出数据的地址
161
00:08:09,381 --> 00:08:10,381
算子的属性
162
00:08:10,381 --> 00:08:13,381
然后下面嵌套 for 的时候怎么办呢
163
00:08:13,381 --> 00:08:15,381
再嵌套一个执行增
164
00:08:15,381 --> 00:08:18,381
为的就是并发的时候可以利用这些记录的工作
165
00:08:18,381 --> 00:08:20,381
或者执行增的这个 Scope
166
00:08:20,381 --> 00:08:22,381
然后进行一些并发的计算
167
00:08:22,381 --> 00:08:26,381
那这个就是 TensorFlow 在底层去执行的一个方式
168
00:08:26,381 --> 00:08:30,381
现在来看一下 TensorFlow 比较特别的
169
00:08:30,381 --> 00:08:33,381
它其实在一个 condition 语句里面
170
00:08:33,381 --> 00:08:37,381
就是 if else 里面用的是两个原语进行组合的
171
00:08:37,381 --> 00:08:39,381
那第一个原语就是 switch
172
00:08:39,381 --> 00:08:41,381
第二个原语就是 merge
173
00:08:41,381 --> 00:08:44,381
通过 switch 和 merge 不断的组合
174
00:08:44,381 --> 00:08:46,381
然后变成这么一条表达式
175
00:08:46,381 --> 00:08:48,381
那可能第一个就是判断
176
00:08:48,381 --> 00:08:50,381
然后第二个就是能不能打执行
177
00:08:50,381 --> 00:08:54,381
可以看到直接用 TensorFlow 的 condition 这个 API
178
00:08:54,381 --> 00:08:56,381
其实是很难去理解
179
00:08:56,381 --> 00:08:59,381
或者非常不方便去写代码的
180
00:08:59,381 --> 00:09:00,381
不过没关系
181
00:09:00,381 --> 00:09:01,381
继续往下看一看
182
00:09:01,381 --> 00:09:04,381
更复杂的一个操作就是 while_loop
183
00:09:04,381 --> 00:09:05,381
写一个 for
184
00:09:05,381 --> 00:09:06,381
写一个 for 的时候
185
00:09:06,381 --> 00:09:08,381
计算图更加复杂了
186
00:09:08,381 --> 00:09:11,381
右边下面的这个是实际上 TensorFlow
187
00:09:11,381 --> 00:09:14,381
这个 AI 框架去执行的计算图
188
00:09:14,381 --> 00:09:17,381
用户用的是 while_loop 这个 API
189
00:09:17,381 --> 00:09:22,381
这时候 TensorFlow 就把五个控制流的原语
190
00:09:22,381 --> 00:09:24,381
进行一个组装拼合
191
00:09:24,381 --> 00:09:26,381
所以它用起来也是让我比较头痛的
192
00:09:26,381 --> 00:09:28,381
那现在来看看
193
00:09:28,381 --> 00:09:30,381
像 TensorFlow 这种方式
194
00:09:30,381 --> 00:09:31,381
就是提供控制流原语
195
00:09:31,381 --> 00:09:33,381
它有什么优缺点
196
00:09:38,881 --> 00:09:40,881
先来聊聊缺点
197
00:09:40,881 --> 00:09:42,881
因为缺点实在是太明显了
198
00:09:42,881 --> 00:09:44,881
就是它的控制流语句
199
00:09:44,881 --> 00:09:46,881
首先是服务它的运行时的
200
00:09:46,881 --> 00:09:48,881
就是为了在它的系统
201
00:09:48,881 --> 00:09:50,881
能够更好的去执行并发
202
00:09:50,881 --> 00:09:54,881
所以它设计了一套这种控制流原语
203
00:09:54,881 --> 00:09:55,881
有一个比较大的问题就是
204
00:09:55,881 --> 00:09:58,881
它跟深度学习的概念差异非常大
205
00:09:58,881 --> 00:10:00,881
我要重新的去学习一套
206
00:10:00,881 --> 00:10:02,881
它的 API 是怎么做的
207
00:10:02,881 --> 00:10:04,881
因为它的用户是用户
208
00:10:06,756 --> 00:10:08,756
第二个问题就是
209
00:10:08,756 --> 00:10:10,756
它对控制流原语进行再次封装
210
00:10:10,756 --> 00:10:12,756
那控制流的 API 的方式
211
00:10:12,756 --> 00:10:14,756
是提供给用户使用的
212
00:10:14,756 --> 00:10:16,756
导致我的计算图很复杂
213
00:10:16,756 --> 00:10:18,756
说白了就是用户看的是
214
00:10:18,756 --> 00:10:20,175
tf.while_loop, tf.cond
215
00:10:20,175 --> 00:10:22,756
实际上计算机执行的是
216
00:10:22,756 --> 00:10:24,756
这么复杂的一个计算图
217
00:10:24,756 --> 00:10:26,756
这个计算图你让我看真不好看
218
00:10:26,756 --> 00:10:30,956
假设它 for 里面再嵌套一个 if else
219
00:10:31,556 --> 00:10:33,956
if else 又嵌套一个 for
220
00:10:33,956 --> 00:10:37,956
这个时候计算图真的没法看了
221
00:10:41,631 --> 00:10:43,631
那优点就是
222
00:10:43,631 --> 00:10:45,631
像计算图里面引入控制流原语
223
00:10:45,631 --> 00:10:47,631
非常方便编译期间
224
00:10:47,631 --> 00:10:49,631
挖掘运行时的效率
225
00:10:49,631 --> 00:10:51,631
也就是 j 极致的性能
226
00:10:51,631 --> 00:10:53,631
第二个就是
227
00:10:53,631 --> 00:10:55,631
解耦数字语言和执行过程
228
00:10:55,631 --> 00:10:57,631
加速整个运行时
229
00:10:57,631 --> 00:10:59,631
第二点可能跟第一点不一样
230
00:10:59,631 --> 00:11:01,631
就是把前端语言表达
231
00:11:01,631 --> 00:11:03,631
跟后端执行
232
00:11:03,631 --> 00:11:05,631
隔离开来
233
00:11:05,631 --> 00:11:07,631
不用反复的去利用宿主的 if else
234
00:11:07,631 --> 00:11:09,631
Pytorch 使用的是动态图
235
00:11:09,631 --> 00:11:11,631
它主要是
236
00:11:11,631 --> 00:11:13,631
复用宿主语言的控制流
237
00:11:13,631 --> 00:11:15,631
所谓的宿主语言
238
00:11:15,631 --> 00:11:17,631
就是高级语言
239
00:11:17,631 --> 00:11:19,631
用户用到写 API 的语言
240
00:11:19,631 --> 00:11:21,631
这里面简单的一个计算图
241
00:11:21,631 --> 00:11:23,631
假设这个是神经网络的图
242
00:11:23,631 --> 00:11:25,631
AI 框架在 Pytorch 里面
243
00:11:25,631 --> 00:11:27,631
就不再维护一个计算图
244
00:11:27,631 --> 00:11:29,631
计算图只是其中一个
245
00:11:29,631 --> 00:11:31,631
方便用户理解的概念
246
00:11:31,631 --> 00:11:33,631
接着使用 Pytorch
247
00:11:33,631 --> 00:11:35,631
就好像使用 Python 代码一样
248
00:11:35,631 --> 00:11:37,631
模型即代码
249
00:11:37,631 --> 00:11:39,631
写一个网络模型出来
250
00:11:39,631 --> 00:11:41,631
就表示神经网络