forked from chenzomi12/AISystem
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path02.srt
1704 lines (1278 loc) · 28 KB
/
02.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:05,050
字幕生成: BLACK 字幕校对: 方鸿渐
2
00:00:05,050 --> 00:00:08,200
Hello 大家好,我是ZOMI
3
00:00:08,200 --> 00:00:10,600
今天来到推理系统系列里面
4
00:00:10,600 --> 00:00:13,080
去真正的了解一下什么是推理系统
5
00:00:13,080 --> 00:00:15,640
那推理系统它不是推理引擎
6
00:00:15,640 --> 00:00:17,400
所以可以区分下来
7
00:00:17,400 --> 00:00:21,640
接下来的内容主要是聚焦于推理系统的整体的介绍
8
00:00:21,640 --> 00:00:25,120
今天我要去给大家分享的内容可能会稍微多了一点
9
00:00:25,120 --> 00:00:29,240
但是我尽量的简洁一点去给大家汇报一下相关的内容
10
00:00:30,880 --> 00:00:34,520
第一个就是去了解一下训练和推理到底有什么区别
11
00:00:34,520 --> 00:00:37,200
接着看看什么是推理系统
12
00:00:37,200 --> 00:00:41,160
第三点就是去看一下推理系统的优化目标和约束
13
00:00:41,160 --> 00:00:43,960
这些更多的是一些宏观上的概念
14
00:00:43,960 --> 00:00:48,600
最后看看推理系统和推理引擎到底要研究哪些内容
15
00:00:48,600 --> 00:00:53,520
其实推理系统对于ZOMI来说应该是最熟悉的一部分了
16
00:00:53,520 --> 00:00:56,280
这个也是我之前在刚进入华为的时候
17
00:00:56,280 --> 00:01:01,560
做了大量非常底层相关的一些代码的研发或者代码的开发工作
18
00:01:03,560 --> 00:01:06,080
下面看一下整体的生命周期
19
00:01:06,080 --> 00:01:07,680
首先很简单
20
00:01:07,680 --> 00:01:11,640
其实大家应该搞 AI 或者做算法的人特别熟
21
00:01:11,640 --> 00:01:14,880
可能做系统的人不是说非常熟
22
00:01:14,880 --> 00:01:17,720
所以我这里面简单的去给大家汇报一下
23
00:01:17,720 --> 00:01:21,320
首先可能会收集非常多的一些训练的数据
24
00:01:21,320 --> 00:01:22,560
公开的数据集也好
25
00:01:22,560 --> 00:01:23,840
自有的数据集也好
26
00:01:23,880 --> 00:01:27,600
然后就会对神经网络模型进行训练
27
00:01:27,600 --> 00:01:31,320
训练完之后就得到一个固定化的网络模型
28
00:01:31,320 --> 00:01:34,600
这个模型就真正的在部署的阶段了
29
00:01:34,600 --> 00:01:36,800
就会在云端做一些服务的请求
30
00:01:36,800 --> 00:01:38,440
还有服务的响应
31
00:01:38,440 --> 00:01:39,840
而在推理引擎
32
00:01:39,840 --> 00:01:43,320
更多是聚焦于这一个深度学习的模型
33
00:01:43,320 --> 00:01:44,800
怎么跑起来更快
34
00:01:44,800 --> 00:01:50,160
而推理系统整个系统需要把端到端的流程串起来
35
00:01:50,160 --> 00:01:52,040
把服务化把它做好
36
00:01:52,160 --> 00:01:53,680
这个就是最大的区别
37
00:01:54,680 --> 00:01:58,880
现在去区分一下训练任务和推理任务之间的一个最大的区别
38
00:01:58,880 --> 00:02:02,040
训练任务更多的是在训练的时候
39
00:02:02,040 --> 00:02:04,960
会采用中心化的一个训练
40
00:02:04,960 --> 00:02:08,400
一般来说训练就需要非常多的时间了
41
00:02:08,400 --> 00:02:11,520
就把数据去跟算法匹配起来
42
00:02:11,520 --> 00:02:13,280
而且需要比较大的数据
43
00:02:13,280 --> 00:02:18,960
然后这个时候对中心服务器的吞吐量还是比较要求高的
44
00:02:19,000 --> 00:02:22,920
而训练的模型的精度和准确率也是比较高的
45
00:02:22,920 --> 00:02:26,120
就尽可能模型的精度和性能比较好
46
00:02:27,880 --> 00:02:30,360
而推理基本上我去想想
47
00:02:31,360 --> 00:02:34,240
HMS Core里面的推理引擎用的是MindSpore
48
00:02:34,240 --> 00:02:37,040
然后它基本上就是因为要服务全球
49
00:02:37,040 --> 00:02:40,160
所以会7×24小时的去服务
50
00:02:40,160 --> 00:02:44,760
而且每天的调用量可能就超过5亿次
51
00:02:44,760 --> 00:02:48,560
每天调用量超过5亿次的服务响应请求
52
00:02:48,560 --> 00:02:52,880
这个时候整个推理的任务的要求是非常高的
53
00:02:52,880 --> 00:02:56,960
而且模型一般稳定收敛的情况下不会重新训练
54
00:02:56,960 --> 00:02:59,760
而且推一个新的模型是非常的谨慎的
55
00:02:59,760 --> 00:03:02,000
因为服务压力请求是非常大的
56
00:03:02,000 --> 00:03:07,040
这个就是深度学习里面生命周期训练和推理的最大的区别
57
00:03:08,800 --> 00:03:12,240
现在看看他们具体的遇到的一些挑战
58
00:03:12,240 --> 00:03:15,320
或者他们的不同的特点
59
00:03:15,360 --> 00:03:17,720
上面这个就是训练场景的
60
00:03:17,720 --> 00:03:19,800
下面就是推理场景的
61
00:03:20,840 --> 00:03:23,560
训练场景会用非常多的数据
62
00:03:23,560 --> 00:03:24,920
就big BatchSize
63
00:03:24,920 --> 00:03:27,360
然后在云服务器上面去跑
64
00:03:27,360 --> 00:03:30,160
这个时候会做一些前向的推理
65
00:03:30,160 --> 00:03:31,040
反向的传播
66
00:03:31,040 --> 00:03:32,200
然后去更新
67
00:03:32,200 --> 00:03:34,720
不断的去训练整个网络模型
68
00:03:34,720 --> 00:03:38,040
使得网络模型的精度肯定是越高越好
69
00:03:38,800 --> 00:03:39,960
在训练完之后
70
00:03:40,120 --> 00:03:43,000
就会把网络模型固定化下来
71
00:03:43,520 --> 00:03:45,960
给到IoT设备或者Web Service
72
00:03:45,960 --> 00:03:47,640
去做一个推理服务的
73
00:03:48,040 --> 00:03:50,360
而推理服务需要的数据量
74
00:03:50,880 --> 00:03:52,880
不会像训练这么大
75
00:03:52,880 --> 00:03:56,880
这个时候使用的更多的是真实的数据场景
76
00:03:56,880 --> 00:03:58,480
然后去部署起来
77
00:03:58,480 --> 00:04:01,520
真正的做一个简单的前向的推理
78
00:04:01,520 --> 00:04:03,000
然后预测到结果
79
00:04:03,200 --> 00:04:05,520
这个结果就会返回给用户
80
00:04:05,520 --> 00:04:08,000
或者返回给Web服务器请求
81
00:04:08,000 --> 00:04:10,160
做一些传统的工作
82
00:04:10,360 --> 00:04:13,280
这个就是他们最大的一些区别
83
00:04:14,480 --> 00:04:16,480
现在看一些遇到的一些挑战
84
00:04:16,480 --> 00:04:18,920
就是模型在推理的时候
85
00:04:18,920 --> 00:04:20,440
需要长期的运行
86
00:04:20,440 --> 00:04:23,600
而且推理会有更加苛刻的资源的要求
87
00:04:23,600 --> 00:04:24,760
因为IoT设备
88
00:04:25,160 --> 00:04:27,360
它的计算资源是非常有限的
89
00:04:27,360 --> 00:04:30,080
而且还是不能做一个反向传播
90
00:04:30,080 --> 00:04:32,040
就基本上不用学习
91
00:04:32,040 --> 00:04:33,440
做个推理就好了
92
00:04:33,440 --> 00:04:35,480
而且部署的型号非常多
93
00:04:36,440 --> 00:04:38,280
可能对于我一个应用来说
94
00:04:38,280 --> 00:04:39,640
用户看到的是一个应用
95
00:04:39,640 --> 00:04:40,880
但是在厂商来说
96
00:04:40,880 --> 00:04:44,440
我看到有100台不同的手机
97
00:04:44,440 --> 00:04:47,320
100台不同的设备去做一个服务的
98
00:04:47,320 --> 00:04:49,240
所以对于要求还是非常高的
99
00:04:51,840 --> 00:04:54,160
现在来看一下推理系统
100
00:04:54,160 --> 00:04:55,200
就是整个推理系统
101
00:04:55,200 --> 00:04:56,440
要做哪些内容呢
102
00:04:56,440 --> 00:04:58,000
就是首先推理系统
103
00:04:58,000 --> 00:05:01,240
最重要的就是管理网络模型
104
00:05:01,240 --> 00:05:02,360
因为训练出来了
105
00:05:02,360 --> 00:05:04,240
会有非常多的网络模型
106
00:05:04,240 --> 00:05:06,840
而这些模型就是对应的算法
107
00:05:06,840 --> 00:05:08,880
要真正的部署给用户的
108
00:05:08,920 --> 00:05:10,760
而整个推理的服务系统里面
109
00:05:10,840 --> 00:05:11,800
做很多工作
110
00:05:12,000 --> 00:05:13,720
第一个就是模型的加载了
111
00:05:13,720 --> 00:05:15,160
模型的版本管理了
112
00:05:15,160 --> 00:05:16,360
还有数据的管理了
113
00:05:16,360 --> 00:05:17,880
还有服务的接口
114
00:05:17,880 --> 00:05:20,920
所以基本上它跟AI训练
115
00:05:20,920 --> 00:05:22,600
或者AI算法不相关
116
00:05:22,600 --> 00:05:25,000
更多的是平台性的工作
117
00:05:25,000 --> 00:05:26,840
然后最后会去除一些
118
00:05:27,200 --> 00:05:30,000
服务器端和客户端的一些请求和响应
119
00:05:30,000 --> 00:05:32,720
完成整个端到端的功能
120
00:05:32,720 --> 00:05:34,880
这个是推理系统要做的工作
121
00:05:36,560 --> 00:05:37,840
而所谓的推理系统
122
00:05:38,000 --> 00:05:40,920
其实不仅仅是以数据中心
123
00:05:40,920 --> 00:05:42,120
为一个服务
124
00:05:42,120 --> 00:05:44,080
作为一个主要的方式
125
00:05:44,080 --> 00:05:45,640
而且它要兼顾边缘的
126
00:05:45,640 --> 00:05:47,000
移动设备的场景
127
00:05:48,000 --> 00:05:51,120
而提到的整个推理服务的策略
128
00:05:52,560 --> 00:05:53,760
不仅仅需要考虑到
129
00:05:53,760 --> 00:05:55,080
数据中心的一个推理
130
00:05:55,080 --> 00:05:57,200
还要考虑到边缘设备的推理
131
00:05:57,200 --> 00:05:59,240
所以推理系统还是很复杂的
132
00:05:59,240 --> 00:06:01,160
它是一个非常复杂的系统工程
133
00:06:01,160 --> 00:06:03,400
下面提几个问题
134
00:06:04,240 --> 00:06:06,720
就是深度学习的推理系统
135
00:06:06,800 --> 00:06:08,480
要做设计的时候
136
00:06:08,480 --> 00:06:11,160
一般要考虑哪些问题
137
00:06:12,320 --> 00:06:13,680
因为考虑的这些问题
138
00:06:13,680 --> 00:06:16,200
可能会影响后面的架构的设计
139
00:06:16,200 --> 00:06:18,040
还有技术的方案
140
00:06:19,080 --> 00:06:21,640
第二点就是推理系统
141
00:06:21,640 --> 00:06:23,680
跟传统的服务系统
142
00:06:23,680 --> 00:06:25,640
有哪些新的挑战
143
00:06:26,640 --> 00:06:28,040
大家可以一起回顾一下
144
00:06:28,040 --> 00:06:32,080
刚才所讨论所探讨的一些内容
145
00:06:33,480 --> 00:06:35,280
最后一个就是云侧
146
00:06:35,280 --> 00:06:36,640
就是中心服务器
147
00:06:36,640 --> 00:06:38,720
还有端侧到手机
148
00:06:38,720 --> 00:06:40,120
或者IoT设备上面
149
00:06:40,120 --> 00:06:44,000
整个推理系统的服务有什么不同
150
00:06:44,000 --> 00:06:46,080
有什么各自的侧重点
151
00:06:46,080 --> 00:06:48,600
我觉得大家可以停下来几分钟
152
00:06:48,600 --> 00:06:51,200
去思考一下具体是怎么做的
153
00:06:51,200 --> 00:06:53,200
因为这个对架构的设计
154
00:06:53,200 --> 00:06:55,000
有非常大的一个挑战
155
00:06:55,000 --> 00:06:56,720
和不同的技术选行
156
00:06:59,640 --> 00:07:02,120
接下来我会去给大家汇报一下
157
00:07:02,120 --> 00:07:04,800
推理系统的一个优化的目标和约束
158
00:07:04,920 --> 00:07:06,840
现在这个更多的是一些
159
00:07:07,720 --> 00:07:08,720
宏观的概念
160
00:07:08,840 --> 00:07:11,320
大家其实可以不用太在乎
161
00:07:11,320 --> 00:07:12,640
或者听一听就完了
162
00:07:14,440 --> 00:07:17,680
现在还是以淘宝作为例子
163
00:07:17,680 --> 00:07:19,760
就是包括在线新闻
164
00:07:19,760 --> 00:07:20,560
推理这些
165
00:07:20,560 --> 00:07:22,200
都是推荐一些
166
00:07:22,200 --> 00:07:24,040
比较喜欢的一些服务
167
00:07:24,040 --> 00:07:25,320
包括抖音它的推荐
168
00:07:25,320 --> 00:07:26,680
其实也是相同的
169
00:07:26,680 --> 00:07:28,480
可能要考虑到低延迟
170
00:07:28,680 --> 00:07:30,120
还有一个高吞吐
171
00:07:30,120 --> 00:07:31,000
还有扩展性
172
00:07:31,000 --> 00:07:32,320
还有准确性的问题
173
00:07:32,320 --> 00:07:33,960
就提一点
174
00:07:34,080 --> 00:07:35,040
就是低延迟
175
00:07:35,040 --> 00:07:37,400
网络上的文章的推荐
176
00:07:37,400 --> 00:07:39,720
或者产品的推荐
177
00:07:39,720 --> 00:07:41,480
希望延迟越少越好
178
00:07:41,480 --> 00:07:43,320
因为我不断的刷刷刷
179
00:07:43,520 --> 00:07:44,840
这个刷刷刷的过程
180
00:07:45,160 --> 00:07:47,960
就要求系统不断的响应
181
00:07:48,120 --> 00:07:49,040
有时候我淘宝
182
00:07:49,040 --> 00:07:50,120
或者我经常刷抖音
183
00:07:50,440 --> 00:07:52,040
也是经常刷刷刷
184
00:07:52,040 --> 00:07:53,360
然后看他不满意的
185
00:07:53,360 --> 00:07:54,600
就下一个
186
00:07:55,280 --> 00:07:56,160
它的推荐过程
187
00:07:56,360 --> 00:07:58,640
是在后面不断的去计算
188
00:07:58,640 --> 00:07:59,960
我哪个视频喜欢
189
00:07:59,960 --> 00:08:02,040
哪个视频是不喜欢的
190
00:08:02,080 --> 00:08:04,000
系统为了算法要考虑很多问题
191
00:08:04,240 --> 00:08:05,440
第二个就是
192
00:08:05,480 --> 00:08:06,720
除了刚才讲的
193
00:08:06,720 --> 00:08:07,880
一些业务上的问题
194
00:08:07,880 --> 00:08:10,560
回到真正跟AI内容相关的
195
00:08:10,560 --> 00:08:11,080
就是
196
00:08:11,400 --> 00:08:12,480
我整个推理系统
197
00:08:12,480 --> 00:08:13,840
假设这个是推理系统
198
00:08:13,840 --> 00:08:14,720
要考虑到
199
00:08:14,720 --> 00:08:16,080
对接很多不同的
200
00:08:16,080 --> 00:08:18,680
AI框架训练出来的模型
201
00:08:18,720 --> 00:08:20,960
接着可能还会考虑到
202
00:08:20,960 --> 00:08:22,600
我要部署在非常多的
203
00:08:22,600 --> 00:08:24,120
不同的硬件上面
204
00:08:24,120 --> 00:08:25,160
而整个推理系统
205
00:08:25,280 --> 00:08:27,120
它有很多模块去组成
206
00:08:27,120 --> 00:08:27,840
不同的模块
207
00:08:28,000 --> 00:08:30,640
又有不同的一个具体的功能
208
00:08:30,680 --> 00:08:32,000
所以说整个推理系统
209
00:08:32,000 --> 00:08:33,880
它是要考虑很多的问题
210
00:08:35,120 --> 00:08:36,160
现在看一下
211
00:08:36,160 --> 00:08:38,440
在设计推理系统时候
212
00:08:38,440 --> 00:08:40,240
需要考虑的几个问题
213
00:08:40,240 --> 00:08:42,560
也就是刚才一个提问
214
00:08:42,560 --> 00:08:44,000
所对应的回答
215
00:08:44,000 --> 00:08:45,200
第一个就是
216
00:08:45,200 --> 00:08:45,920
低延迟
217
00:08:45,920 --> 00:08:46,680
高吞吐
218
00:08:46,680 --> 00:08:47,280
高效率
219
00:08:47,280 --> 00:08:47,840
灵活性
220
00:08:47,840 --> 00:08:48,440
扩展性
221
00:08:48,440 --> 00:08:51,560
下面我简单的去展开一下
222
00:08:51,560 --> 00:08:52,640
对应的内容
223
00:08:52,640 --> 00:08:54,120
第一个就是灵活性
224
00:08:54,120 --> 00:08:55,480
就是AI部署
225
00:08:55,840 --> 00:08:57,320
AI服务的部署
226
00:08:57,520 --> 00:08:59,840
其实对于优化和系统维护来说
227
00:08:59,840 --> 00:09:01,840
是比较困难的
228
00:09:01,840 --> 00:09:04,200
因为需要对接非常多的框架
229
00:09:04,360 --> 00:09:05,040
可以看到
230
00:09:05,040 --> 00:09:06,840
AI框架有非常多
231
00:09:06,840 --> 00:09:08,800
而且对应的硬件系统
232
00:09:08,800 --> 00:09:10,040
也是非常的复杂
233
00:09:10,040 --> 00:09:12,560
所以要求整个AI系统
234
00:09:12,560 --> 00:09:15,800
是要求它整个灵活性要比较高
235
00:09:15,800 --> 00:09:17,680
这个是对于系统开发工程师
236
00:09:17,680 --> 00:09:19,200
或者一些厂商来说
237
00:09:19,200 --> 00:09:22,120
第二个就是整体的灵活性
238
00:09:22,760 --> 00:09:23,800
系统的灵活性
239
00:09:23,920 --> 00:09:25,640
就需要可以支持非常多的
240
00:09:25,640 --> 00:09:27,000
不同的AI的模型
241
00:09:27,240 --> 00:09:29,200
而且AI的框架的版本迭代
242
00:09:29,320 --> 00:09:31,800
这个是对挑战是非常高的
243
00:09:31,800 --> 00:09:34,200
要维护非常多的版本
244
00:09:34,200 --> 00:09:36,880
第三个就是跟不同的语言的对接
245
00:09:36,880 --> 00:09:38,920
还有不同的逻辑的应用的结合
246
00:09:38,920 --> 00:09:40,760
因为应用五花八门
247
00:09:40,760 --> 00:09:43,280
还有语言也是非常的多
248
00:09:43,280 --> 00:09:44,760
包括部署在iOS
249
00:09:44,760 --> 00:09:46,320
部署在网页上面
250
00:09:46,320 --> 00:09:48,960
部署在安卓手机