Skip to content

DirectML版の推論速度が遅いっぽい #422

@Hiroshiba

Description

@Hiroshiba

不具合の内容

エンジン側で発覚し、コアで測定した結果どうやらコアの時点で遅いっぽいことがわかりました。

現象・ログ

0.14.0のコア(wheel)で、CPU/GPUで2回ずつ計測

CPU
Total time: 8.854429006576538 seconds

GPU
Total time: 7.63310980796814 seconds

CPU
Total time: 11.323852300643921 seconds

GPU
Total time: 7.5207672119140625 seconds

0.13.3を用いた場合、(エンジン経由で)2秒で完了したのでおそらく0.14で遅くなったのかなと思っています。

再現手順

0.14.0のDirectML版で実行してみる

VOICEVOXのバージョン

0.14.0

OSの種類/ディストリ/バージョン

  • Windows
  • macOS
  • Linux

その他

検証コード(wheel版をインストールしました)

import dataclasses
import json
import logging
import time
from argparse import ArgumentParser
from pathlib import Path
from typing import Tuple

import voicevox_core
from voicevox_core import AccelerationMode, AudioQuery, VoicevoxCore

SPEAKER_ID = 0


def tts(core, text: str):
    audio_query = core.audio_query(text, SPEAKER_ID)
    wav = core.synthesis(audio_query, SPEAKER_ID)
    return wav


def main() -> None:
    logging.basicConfig(
        format="[%(levelname)s] %(filename)s: %(message)s", level="DEBUG"
    )
    logger = logging.getLogger(__name__)

    (acceleration_mode, open_jtalk_dict_dir, text, out) = parse_args()

    core = VoicevoxCore(
        acceleration_mode=acceleration_mode, open_jtalk_dict_dir=open_jtalk_dict_dir
    )
    core.load_model(SPEAKER_ID)

    tts(core, "テスト実行")

    start_second = time.time()
    for i in range(10):
        wav = tts(core, text)
    end_second = time.time()

    logger.info("%s", f"Total time: {end_second - start_second} seconds")


def parse_args() -> Tuple[AccelerationMode, Path, str, Path]:
    argparser = ArgumentParser()
    argparser.add_argument(
        "--mode",
        default="AUTO",
        type=AccelerationMode,
        help='モード ("AUTO", "CPU", "GPU")',
    )
    argparser.add_argument(
        "--open_jtalk_dict_dir",
        type=Path,
        default="voicevox_core/open_jtalk_dic_utf_8-1.11/",
        help="Open JTalkの辞書ディレクトリ",
    )
    argparser.add_argument(
        "text",
        help="読み上げさせたい文章",
    )
    argparser.add_argument(
        "--out",
        type=Path,
        help="出力wavファイルのパス",
        default="/tmp/out.wav",
    )
    args = argparser.parse_args()
    return (args.mode, args.open_jtalk_dict_dir, args.text, args.out)


def display_as_json(audio_query: AudioQuery) -> str:
    return json.dumps(dataclasses.asdict(audio_query), ensure_ascii=False)


if __name__ == "__main__":
    main()

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions