出于某种原因,当我使用 PiperTTS 使用
taskset -c 2,3 python myprogram.py
生成语音时,系统不会限制对我指定的核心进行处理。
当我使用另一个库时,例如
llama-cpp-python
,taskset
能够限制核心执行。我还尝试使用 psutil
python 库来设置 CPU 亲和力,但这也不起作用。
PiperTTS 利用 OnnxRuntime,它在内部管理自己的线程。
尝试将
-a
标志与任务集一起使用(例如 taskset -ac 2,3 ...
)或按如下方式配置 OnnxRuntime:
import onnxruntime as ort
sess_opt = ort.SessionOptions()
sess_opt.intra_op_num_threads = 3
sess_opt.add_session_config_entry('session.intra_op_thread_affinities', '1;2')
sess = ort.InferenceSession('model.onnx', sess_opt, ...)
# initialize Piper
# see https://github.com/rhasspy/piper/blob/c0670df63daf07070c9be36b5c4bed270ad72383/src/python_run/piper/voice.py#L25
from piper import PiperVoice
from piper.config import PiperConfig
voice = PiperVoice(
config=PiperConfig.from_dict({...}),
session=sess
)