性能#

评估过程#

本节显示了 Riva ASR 服务在不同 GPU 上的流式和离线配置的延迟和吞吐量数据。这些数据是在部署了我们快速入门脚本中预配置的 ASR 管道后捕获的。测试了 Conformer 和 Parakeet 声学模型。

在流式模式下,客户端和服务器使用相同持续时间的音频块(100 毫秒、160 毫秒和 800 毫秒,具体取决于服务器配置)。有关要使用的块大小值,请参阅结果部分。

Riva 流式客户端 riva_streaming_asr_client(在 Riva 镜像中提供)与 --simulate_realtime 标志一起使用,以模拟来自麦克风的转录,其中每个流对 LibriSpeech dev-clean 数据集中的示例音频文件 (1272-135031-0000.wav) 执行三次迭代。LibriSpeech 数据集可以从 https://www.openslr.org/12 获取。

riva_streaming_asr_client 的源代码可以从 https://github.com/nvidia-riva/cpp-clients 获取。

用于测量性能的命令是

riva_streaming_asr_client \
   --chunk_duration_ms=<chunk_duration> \
   --simulate_realtime=true \
   --automatic_punctuation=true \
   --num_parallel_requests=<num_streams> \
   --word_time_offsets=false \
   --print_transcripts=false \
   --interim_results=false \
   --num_iterations=<3*num_streams> \
   --audio_file=1272-135031-0000.wav \
   --output_filename=/tmp/output.json

riva_streaming_asr_client 返回以下延迟测量值

  • intermediate latency:使用 is_final == false 返回的响应的延迟

  • final latency:使用 is_final == true 返回的响应的延迟

  • latency:所有返回响应的总体延迟。这是以下表格中列出的内容。

有关 Riva 流式 ASR 客户端测量的不同延迟的示意图,请参阅下图。

Schematic Diagram of Latencies Measured by Riva Streaming ASR Client

在离线模式下,用于测量最大吞吐量的命令是

riva_asr_client \
   --automatic_punctuation=true \
   --num_parallel_requests=32 \
   --word_time_offsets=false \
   --print_transcripts=false \
   --num_iterations=96 \
   --audio_file=1272-135031-0000x5.wav \
   --output_filename=/tmp/output.json

其中 1272-135031-0000x5.wav 只是 1272-135031-0000.wav 音频文件重复五次。 riva_asr_client 的源代码可以从以下网址获取: https://github.com/nvidia-riva/cpp-clients

注意

当使用 Whisper ASR 模型时,使用上述客户端命令提供输入语言代码(例如:--language_code=en-US)将产生最佳吞吐量,因为它避免了对输入音频运行语言识别的需要。

结果#

以下表格报告了流式和离线配置的延迟和吞吐量测量值。吞吐量以 RTFX(转录的音频时长/计算时间)为单位进行测量。

注意

音频文件在 Xavier AGX、Xavier NX 和 Orin AGX 上迭代 1 次,在所有其他实验中迭代 3 次。

注意

如果语言模型为 none,则推理使用贪婪解码器执行。如果语言模型为 n-gram,则使用波束解码器。

注意

表格中的值是 3 次试验的平均值。表格中的值根据 3 次试验计算的标准偏差四舍五入到最后一位有效数字。如果标准偏差小于平均值的 0.001,则将相应值四舍五入,就好像标准偏差等于该值的 0.001 一样。

有关收集这些测量值的硬件规格,请参阅硬件规格部分。请注意,

  • AWS 和 GCP 上的结果是使用 Riva 2.4.0 计算的

  • 本地结果是使用 Riva 2.15.0 计算的。

AWSGCP 的云实例描述。

块大小 (毫秒): 160
使用 n-gram 语言模型的最大有效流数: 218
不使用 语言模型(贪婪生成)的最大有效流数: 223

语言模型

流数

延迟 (毫秒)

吞吐量 (RTFX)

平均值

p50

p90

p95

p99

n-gram

1

13

11.9

12.8

13

40

0.999

n-gram

8

18.8

17.4

19

20

57

7.99

n-gram

16

24.8

22

30

32

80

15.96

n-gram

32

34

30

43

46

110

31.86

n-gram

48

44

41

60

66

160

47.7

n-gram

64

50

50

67

75

200

63.6

n-gram

128

86

67

100

220

360

126.5

1

12

11.3

12

12.5

30

1

8

17

15.8

16.6

20

49.6

7.99

16

22.1

19.9

26

29.5

70

15.96

32

32

30

39.7

44

100

31.9

48

40

40

56

57

160

47.7

64

46

45

60

65

170

63.6

128

80

60

97

200

330

126.5

以下表格展示了 CPU 数量对延迟和吞吐量的影响。测量是在本地使用英语 Conformer 模型进行的。

块大小 (毫秒): 160
语言模型: n-gram
最大有效流数 使用 n-gram 语言模型: 193

流数

延迟 (毫秒)

吞吐量 (RTFX)

平均值

p50

p90

p95

p99

1

13

12

13

13.3

40

0.999

8

21

19

26

30

60

7.98

16

28.6

25.2

35

44

90

15.95

32

40

40

53

60

135

31.84

48

50

48

69

80

200

47.7

64

64

60

81

110

250

63.5

128

116

85

200

363

510

126.3

256

3600

3500

7000

7200

8300

206

本地硬件规格#

GPU

NVIDIA DGX A100 40 GB

CPU

型号

AMD EPYC 7742 64-Core Processor

每核线程数

2

插槽数

2

每插槽核心数

64

NUMA 节点数

8

频率加速

已启用

CPU 最大 MHz

2250

CPU 最小 MHz

1500

内存

型号

Micron DDR4 36ASF8G72PZ-3G2B2 3200MHz

配置内存速度

2933 MT/s

内存大小

32x64GB (2048GB Total)