forked from chenzomi12/AISystem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
01.srt
1356 lines (1017 loc) · 22 KB
/
01.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:02,000
字幕生成: BLACK 字幕校对: 杨绎
1
00:00:05,360 --> 00:00:06,240
诶 开始了
2
00:00:06,240 --> 00:00:08,240
诶 大家好 我是ZOMI
3
00:00:08,240 --> 00:00:10,400
刚才11点半才看完会
4
00:00:10,400 --> 00:00:11,200
然后刚洗完澡
5
00:00:11,200 --> 00:00:12,560
现在已经12点半了
6
00:00:12,560 --> 00:00:13,440
晚上
7
00:00:13,440 --> 00:00:15,760
那今天来开始一个新的内容
8
00:00:15,760 --> 00:00:17,680
就是AI编译器里面的PyTorch
9
00:00:17,680 --> 00:00:21,200
大家都知道PyTorch最近发布了一个最新的版本2.0
10
00:00:21,325 --> 00:00:23,040
它尝鲜了 还没有发布
11
00:00:23,040 --> 00:00:23,165
那现在来看看PyTorch 2.0有哪些新的内容
12
00:00:23,165 --> 00:00:27,200
那现在来看看PyTorch 2.0有哪些新的内容
13
00:00:27,200 --> 00:00:29,360
可以看到PyTorch 2.0
14
00:00:29,360 --> 00:00:31,120
其实它引入了一个最大的概念
15
00:00:31,120 --> 00:00:32,800
就是编译
16
00:00:32,800 --> 00:00:36,160
这就完全符合最近聊到的AI编译器这个系列
17
00:00:36,160 --> 00:00:39,520
所以我把PyTorch 2.0这个新的话题往前提
18
00:00:39,520 --> 00:00:41,440
看一下这个汇报里面
19
00:00:41,440 --> 00:00:43,360
我给大家分开了四个内容
20
00:00:43,360 --> 00:00:46,080
第一个就是PyTorch 2.0的新特性
21
00:00:46,080 --> 00:00:48,880
首先来看看PyTorch 2.0有哪些新特性
22
00:00:48,880 --> 00:00:50,160
然后对它进行安装
23
00:00:50,160 --> 00:00:51,760
然后去使用一下
24
00:00:51,760 --> 00:00:55,200
接着一起来解读一下PyTorch的一些新的特性
25
00:00:55,280 --> 00:00:59,760
例如Torch、Dynamo、AOTAutoGrid
26
00:00:59,760 --> 00:01:02,000
最后一个就是TorchInductor
27
00:01:02,000 --> 00:01:03,280
三个最重要的特性
28
00:01:03,280 --> 00:01:05,200
将会后面的内容去展开
29
00:01:05,200 --> 00:01:09,440
今天先围绕PyTorch 2.0新特性一起去看看
30
00:01:12,080 --> 00:01:13,760
首先打开PyTorch的官网
31
00:01:13,760 --> 00:01:14,800
然后去到Get Satrted
32
00:01:14,800 --> 00:01:16,480
点击PyTorch 2.0
33
00:01:16,480 --> 00:01:20,000
下面这些就是PyTorch 2.0最新的特性介绍
34
00:01:20,000 --> 00:01:21,520
跳到Install
35
00:01:21,520 --> 00:01:23,440
然后去看看怎么安装
36
00:01:24,400 --> 00:01:26,640
现在把这条命令复制粘贴
37
00:01:28,240 --> 00:01:29,840
到Terminal里面
38
00:01:34,480 --> 00:01:34,960
粘贴
39
00:01:35,600 --> 00:01:38,640
然后Torch 2.0居然已经开始安装了
40
00:01:39,600 --> 00:01:42,320
可以看到PyTorch 2.0虽然是PyTorch 2.0
41
00:01:42,320 --> 00:01:47,040
但是现在的尝鲜版Nightly版还是1.14来给大家提供的
42
00:01:49,600 --> 00:01:50,240
居然错误
43
00:01:52,160 --> 00:01:52,960
没有权限
44
00:01:53,520 --> 00:01:54,000
没有权限
45
00:01:54,000 --> 00:01:56,320
那我加个sudo提升一下权限
46
00:02:09,120 --> 00:02:09,760
安装完了
47
00:02:11,600 --> 00:02:13,760
现在从上面到下面
48
00:02:13,760 --> 00:02:16,640
逐个的简单的浏览一下PyTorch 2.0
49
00:02:16,640 --> 00:02:20,160
可以看到PyTorch 2.0主要推出4个重要的特性
50
00:02:20,160 --> 00:02:25,680
其中Torch Compiler里面这个技术栈就包含了4个最重要的特性
51
00:02:25,680 --> 00:02:26,640
Torch Dynamo
52
00:02:26,640 --> 00:02:27,440
Autograd
53
00:02:27,440 --> 00:02:28,640
还有Torch Inductor
54
00:02:30,960 --> 00:02:34,880
这个图等一下后面会详细的去展开解读
55
00:02:34,880 --> 00:02:35,760
这个就是版本
56
00:02:38,480 --> 00:02:39,600
Crazy Mode
57
00:02:39,600 --> 00:02:40,400
有点意思
58
00:02:40,400 --> 00:02:41,760
这个平衡杆
59
00:02:43,840 --> 00:02:46,720
看看这个就是PyTorch的编译的流程
60
00:02:46,720 --> 00:02:47,120
先不管
61
00:02:47,120 --> 00:02:48,320
后面详细展开
62
00:02:49,280 --> 00:02:50,960
有4个重要的特性
63
00:02:50,960 --> 00:02:52,000
有Torch Grid
64
00:02:52,000 --> 00:02:53,040
Torch Inductor
65
00:02:53,840 --> 00:02:54,800
PrimTorch
66
00:02:54,800 --> 00:02:56,080
下面这个图
67
00:02:57,200 --> 00:02:58,560
下面这个图帅
68
00:02:58,560 --> 00:02:59,600
下面这个图帅气
69
00:03:01,040 --> 00:03:03,520
把所有的算子都做了一个归约 分类
70
00:03:04,480 --> 00:03:05,120
不错
71
00:03:05,120 --> 00:03:07,040
变成了250多个算子
72
00:03:07,040 --> 00:03:09,600
然后收编到ATen里面700多个
73
00:03:11,040 --> 00:03:12,480
对于三方芯片厂商来说
74
00:03:12,480 --> 00:03:13,680
这个特性有点吸引
75
00:03:14,560 --> 00:03:16,000
现在打开Notebook
76
00:03:16,000 --> 00:03:17,120
来去尝鲜一下
77
00:03:17,120 --> 00:03:18,080
这些新的特性
78
00:03:20,160 --> 00:03:22,080
现在来真正的录代码了
79
00:03:22,640 --> 00:03:23,840
首先Import
80
00:03:23,840 --> 00:03:24,480
Time
81
00:03:24,480 --> 00:03:25,360
Import Torch
82
00:03:26,480 --> 00:03:29,520
Import Torch.Dynamo as Dynamo
83
00:03:29,520 --> 00:03:30,880
这个就是新的特性
84
00:03:33,920 --> 00:03:35,840
Import Torch Vision.Models
85
00:03:35,840 --> 00:03:38,000
用于后面直接把模型加载进来用
86
00:03:42,160 --> 00:03:42,960
Print Torch
87
00:03:42,960 --> 00:03:45,040
刚刚目前看看是用哪个版本
88
00:03:45,040 --> 00:03:45,680
1.14
89
00:03:45,680 --> 00:03:46,720
刚好是想要的
90
00:03:47,440 --> 00:03:48,240
Define
91
00:03:48,240 --> 00:03:50,000
建立一个简单的函数
92
00:03:55,120 --> 00:03:56,960
返回A加上B
93
00:03:56,960 --> 00:04:00,160
现在做一个简单的测试实验
94
00:04:06,720 --> 00:04:08,880
首先定一个Compiled Model
95
00:04:09,760 --> 00:04:11,520
等于Torch Compiled
96
00:04:12,080 --> 00:04:12,640
-
97
00:04:12,640 --> 00:04:15,120
这个就是使用PyTorch最新的编译功能
98
00:04:15,680 --> 00:04:17,360
里面隐藏了一个编译器
99
00:04:17,360 --> 00:04:19,520
然后输出等于Compiled Model
100
00:04:19,520 --> 00:04:22,080
然后把两个输入参数输进去
101
00:04:30,800 --> 00:04:33,280
然后算一下输出的时间
102
00:04:33,840 --> 00:04:34,960
接着打印出来
103
00:04:35,680 --> 00:04:38,160
End-Start
104
00:04:38,160 --> 00:04:38,640
可以看到
105
00:04:39,840 --> 00:04:40,960
好这么简单一个程序
106
00:04:40,960 --> 00:04:43,520
居然耗了我1.59秒
107
00:04:44,320 --> 00:04:45,520
有点长有点长
108
00:04:45,520 --> 00:04:47,200
接下来做另外一个实验去看看
109
00:04:48,400 --> 00:04:50,560
现在假设使用Dynamo
110
00:04:50,560 --> 00:04:52,560
这个功能去做一个优化
111
00:04:52,560 --> 00:04:54,960
然后里面的后端使用Inductor
112
00:04:56,160 --> 00:05:00,400
Inductor在CPU上面使用是OpenMP去编译的
113
00:05:01,280 --> 00:05:02,560
0.02秒
114
00:05:02,560 --> 00:05:03,120
有点快
115
00:05:03,520 --> 00:05:04,640
使用了Dynamo
116
00:05:04,640 --> 00:05:06,160
然后指定了后端之后
117
00:05:06,160 --> 00:05:07,360
它编译快了好多
118
00:05:08,000 --> 00:05:09,520
再试一个实验
119
00:05:09,520 --> 00:05:10,960
假设我啥都不用
120
00:05:11,040 --> 00:05:13,600
直接用以前的动态图
121
00:05:13,600 --> 00:05:15,040
或者Eagle的模式
122
00:05:15,040 --> 00:05:16,800
直接使用Pytorch原生的动态图
123
00:05:16,800 --> 00:05:18,000
或者Eagle模式更快
124
00:05:18,000 --> 00:05:20,240
直接用了0.0006毫秒
125
00:05:21,200 --> 00:05:22,720
那我为啥要编译层呢
126
00:05:22,720 --> 00:05:24,320
我为啥要编译器呢
127
00:05:24,320 --> 00:05:25,200
编译器有啥用
128
00:05:25,200 --> 00:05:26,320
编译器不是说快了吗
129
00:05:26,320 --> 00:05:27,520
为啥编译器会慢的呢
130
00:05:28,160 --> 00:05:28,800
不着急
131
00:05:28,800 --> 00:05:29,840
后面会讲到
132
00:05:30,640 --> 00:05:33,440
现在定义一个AlexNet
133
00:05:33,440 --> 00:05:34,640
还是定义AlexNet
134
00:05:37,360 --> 00:05:39,040
然后定义优化器
135
00:05:41,760 --> 00:05:46,480
定义AlexNet
136
00:05:51,840 --> 00:05:52,800
现在compile more
137
00:05:53,360 --> 00:05:56,480
然后对models进行一个编译
138
00:05:56,480 --> 00:05:59,440
下面这个就是真正的去执行一下
139
00:05:59,440 --> 00:06:00,960
这个网络模型
140
00:06:00,960 --> 00:06:02,560
随机产生一个数据
141
00:06:02,560 --> 00:06:04,240
然后定一个反向
142
00:06:19,005 --> 00:06:20,675
做个正反向的推理发现
143
00:06:20,675 --> 00:06:23,900
用了2.79毫秒
144
00:06:26,865 --> 00:06:28,425
使用了Pytorch编译器之后
145
00:06:28,425 --> 00:06:29,900
用了2.79毫秒
146
00:06:29,900 --> 00:06:31,100
假设我现在不用
147
00:06:36,160 --> 00:06:37,600
不用我看看时间
148
00:06:37,600 --> 00:06:40,150
哇 不用时间只有1.027毫秒
149
00:06:40,150 --> 00:06:42,160
就是 我为啥还要用编译器
150
00:06:42,160 --> 00:06:43,740
这样慢了那么多
151
00:06:44,160 --> 00:06:45,280
这边原生挺好的
152
00:06:46,000 --> 00:06:46,960
再往下看
153
00:06:47,920 --> 00:06:49,040
多做几个实验
154
00:06:50,400 --> 00:06:52,240
现在刚才只是跑一个正向
155
00:06:52,240 --> 00:06:53,280
跑一个反向
156
00:06:53,280 --> 00:06:55,680
假设我现在多做几轮epoch
157
00:06:57,360 --> 00:06:59,120
模拟在真实对网络模型
158
00:06:59,120 --> 00:07:00,720
进行训练的一个场景
159
00:07:04,880 --> 00:07:05,920
然后用count
160
00:07:05,920 --> 00:07:08,640
然后去把每一轮迭代的时间算进来
161
00:07:09,200 --> 00:07:11,600
现在这个就是使用动态图
162
00:07:11,600 --> 00:07:12,640
或者一个模式的
163
00:07:12,640 --> 00:07:14,240
看看总的耗时
164
00:07:14,240 --> 00:07:15,680
或者每一次的耗时有多少
165
00:07:16,880 --> 00:07:17,760
finish training
166
00:07:25,280 --> 00:07:27,520
接着每一秒跑一次
167
00:07:28,160 --> 00:07:28,960
挺快的
168
00:07:28,960 --> 00:07:30,400
跑个AlexNet还是挺快的
169
00:07:30,400 --> 00:07:32,880
然后平均时间是1.069毫秒
170
00:07:33,840 --> 00:07:36,640
没有跑编译的时候是这个
171
00:07:36,720 --> 00:07:39,120
那跑跑编译的方式
172
00:07:39,120 --> 00:07:40,160
那compile model
173
00:07:40,160 --> 00:07:41,600
然后看一下它的时间
174
00:07:49,280 --> 00:07:50,880
好像比上面快
175
00:07:50,880 --> 00:07:52,000
那看一下快多少
176
00:07:52,720 --> 00:07:53,600
1.024
177
00:07:54,160 --> 00:07:56,560
明显比刚才1.069快了
178
00:07:56,560 --> 00:07:58,720
那么0.04毫秒
179
00:07:59,360 --> 00:08:00,320
这有点意思
180
00:08:00,880 --> 00:08:02,320
在单一期执行的时候
181
00:08:02,320 --> 00:08:03,520
我有编译的开销
182
00:08:03,520 --> 00:08:05,440
所以单一期执行的时候会慢一点
183
00:08:05,520 --> 00:08:08,000
但是它敌不过我做一个训练的时候
184
00:08:08,000 --> 00:08:09,360
我是多轮迭代的
185
00:08:09,360 --> 00:08:10,720
其实我图已经编译好了
186
00:08:10,720 --> 00:08:13,600
我下次直接把静态的图拿出来去执行
187
00:08:13,600 --> 00:08:15,200
所以就快了很多
188
00:08:15,200 --> 00:08:17,760
那这只是用一个最简单的AlexNet
189
00:08:17,760 --> 00:08:20,240
在CPU苹果上面去跑
190
00:08:20,240 --> 00:08:22,720
假设我在GPU上面跑会不会快很多
191
00:08:22,720 --> 00:08:25,440
刚才简单的去浏览了一次新的特性
192
00:08:25,440 --> 00:08:27,120
就把刚才那个网页看了一遍
193
00:08:27,120 --> 00:08:28,400
然后又装了一遍
194
00:08:28,400 --> 00:08:30,480
然后把新特性也用了一遍
195
00:08:30,480 --> 00:08:34,000
现在去看看它的一些新特性
196
00:08:34,080 --> 00:08:36,080
最后再做一个启发性的思考
197
00:08:36,080 --> 00:08:38,240
首先回顾一下未来的版本
198
00:08:38,240 --> 00:08:41,280
它说在2.0的时候会支持Torch Combined
199
00:08:41,280 --> 00:08:42,960
with DDP和FSDP
200
00:08:42,960 --> 00:08:44,480
就是我有了静态图之后
201
00:08:44,480 --> 00:08:46,320
就更好的去做分布式了
202
00:08:46,320 --> 00:08:49,040
然后大部分的模型有30%的提升
203
00:08:49,040 --> 00:08:51,920
怪不得刚才说性能确实是好了
204
00:08:51,920 --> 00:08:54,400
只是在一毫秒里面就快了那么一点点
205
00:08:54,400 --> 00:08:55,680
你感觉不出来
206
00:08:55,680 --> 00:08:59,840
那2.S里面就会有更stable的版本去推出
207
00:08:59,840 --> 00:09:01,120
那后面的版本先不管
208
00:09:01,120 --> 00:09:02,320
先看近的
209
00:09:02,400 --> 00:09:05,520
在之前认为PyTorch它是没有编译器的
210
00:09:05,520 --> 00:09:07,760
因为它大部分的时候你都用不到
211
00:09:07,760 --> 00:09:09,360
因为现在PyTorch 2.0之后
212
00:09:09,360 --> 00:09:12,640
明确的支持Torch Dynamos加AOT AutoGrid
213
00:09:12,640 --> 00:09:16,320
那AOT就是Ahead of Time的一种编译的方式
214
00:09:16,320 --> 00:09:19,200
那在底层走的是ATen还有Prim IR
215
00:09:19,200 --> 00:09:20,960
最后就给Torch Inductor
216
00:09:20,960 --> 00:09:22,240
然后去执行的
217
00:09:22,240 --> 00:09:25,680
那Torch Inductor就是由Triton拿去提供的
218
00:09:26,880 --> 00:09:29,280
现在来看看它的模型泛化性
219
00:09:29,280 --> 00:09:31,280
这里面用了TIMM,TorchBench
220
00:09:31,280 --> 00:09:34,320
还有Huggingface这三个套件去测
221
00:09:34,320 --> 00:09:37,280
那基本上大部分模型都有非常大的性能提升
222
00:09:37,280 --> 00:09:38,720
看看用了多少模型
223
00:09:38,720 --> 00:09:42,000
46个加61个再加56个
224
00:09:42,000 --> 00:09:45,200
一共有150多个模型有性能的提升
225
00:09:45,200 --> 00:09:47,360
确实它做了很多的泛化性测试
226
00:09:47,360 --> 00:09:49,040
看起来还是很不错的
227
00:09:49,680 --> 00:09:52,800
那第一个重要的特性就是Torch Dynamo
228
00:09:52,800 --> 00:09:55,280
Dynamo就是发电机的意思
229
00:09:55,280 --> 00:09:57,920
主要是从PyTorch以前的静态图
230
00:09:57,920 --> 00:09:59,600
然后获取了一个图的概念
231
00:09:59,600 --> 00:10:01,280
然后进行一个执行的
232
00:10:01,280 --> 00:10:02,320
这里面说了很多
233
00:10:02,320 --> 00:10:04,240
主要是在99%的时间
234
00:10:04,240 --> 00:10:05,200
它都是能工作的
235
00:10:05,200 --> 00:10:06,480
就工作的非常好
236
00:10:06,480 --> 00:10:07,760
在保持应用性的同时
237
00:10:07,920 --> 00:10:10,960
还提升了非常稳健的性能提升
238
00:10:11,520 --> 00:10:13,440
这个特性也是2.0里面
239
00:10:13,440 --> 00:10:15,040
主打最重要的一个特性
240
00:10:15,040 --> 00:10:17,120
所以放在第一Dynamo
241
00:10:17,120 --> 00:10:19,120
那第二个就是AOT
242
00:10:19,120 --> 00:10:20,800
Ahead of Time Autogrid
243
00:10:20,800 --> 00:10:23,120
刚才Torch Dynamo只是一个编译层
244
00:10:23,280 --> 00:10:25,200
但是实际上Autogrid
245
00:10:25,200 --> 00:10:27,120
就是反向自动求导的时候怎么做
246
00:10:27,600 --> 00:10:29,360
它使用了一个AOT的
247
00:10:29,360 --> 00:10:31,760
一个对图的编译的方式
248
00:10:31,760 --> 00:10:33,600
里面就通过Torch Dispatch
249
00:10:33,600 --> 00:10:35,280
去做一个分辨和追踪的