From c2897091b7eddd3fb4a2261f4220e1b74ee1c84c Mon Sep 17 00:00:00 2001 From: yumoqing Date: Wed, 16 Jul 2025 14:29:06 +0800 Subject: [PATCH] first commit --- README.md | 0 app/asr.py | 47 +++++++++++++++++++++++++++++++++++++++++++ conf/config.json | 50 ++++++++++++++++++++++++++++++++++++++++++++++ nvidia-asr.service | 15 ++++++++++++++ requirements.txt | 4 ++++ start.sh | 7 +++++++ stop.sh | 4 ++++ 7 files changed, 127 insertions(+) create mode 100644 README.md create mode 100644 app/asr.py create mode 100644 conf/config.json create mode 100644 nvidia-asr.service create mode 100644 requirements.txt create mode 100755 start.sh create mode 100755 stop.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..e69de29 diff --git a/app/asr.py b/app/asr.py new file mode 100644 index 0000000..d19c933 --- /dev/null +++ b/app/asr.py @@ -0,0 +1,47 @@ +from ahserver.webapp import webapp +from ahserver.serverenv import ServerEnv +from ahserver.filestorage import FileStorage +from appPublic.log import debug,exception, error +from appPublic.worker import awaitify +from appPublic.jsonConfig import getConfig +import torch +import nemo.collections.asr as nemo_asr + +class NVidiaASR: + def __init__(self): + config = getConfig() + self.models = {} + device = torch.device(config.device) + for lang, model_path in config.asr_models.items(): + debug(f'{lang=}, {model_path=}') + model = None + if lang == 'en': + model = nemo_asr.models.EncDecCTCModelBPE.restore_from(model_path) + elif lang == 'cn': + model = nemo_asr.models.EncDecCTCModel.restore_from(model_path) + model.to(device) + self.models[lang] = model + + def _generate(self, audio_file, lang): + model = self.models.get(lang) + output = model.transcribe([audio_file]) + return output + + async def generate(self, audio_file, lang='en'): + f = awaitify(self._generate) + t1 = time.time() + content = await f(audio_file, lang) + t2 = time.time() + return { + 'content':content, + 'timecost':t2 - t1 + } + +def init(): + g = ServerEnv() + g.asr_engine = NVidiaASR() + g.generate = g.asr_engine.generate + +if __name__ == '__main__': + webapp(init) + diff --git a/conf/config.json b/conf/config.json new file mode 100644 index 0000000..2640ecd --- /dev/null +++ b/conf/config.json @@ -0,0 +1,50 @@ +{ + "device" : "cuda", + "asr_models":{ + "cn": "/share/models/nvidia/stt_zh_citrinet_1024_gamma_0_25/stt_zh_citrinet_1024_gamma_0_25.nemo", + "en": "/share/models/nvidia/stt_en_conformer_ctc_large/stt_en_conformer_ctc_large.nemo" + }, + "logger":{ + "name":"asr", + "levelname":"info", + "logfile":"$[workdir]$/logs/asr.log" + }, + "filesroot":"$[workdir]$/files", + "website":{ + "paths":[ + ["$[workdir]$/wwwroot",""] + ], + "client_max_size":10000, + "host":"0.0.0.0", + "port":9992, + "coding":"utf-8", + "indexes":[ + "index.html", + "index.tmpl", + "index.ui", + "index.dspy", + "index.md" + ], + "startswiths":[ + { + "leading":"/idfile", + "registerfunction":"idfile" + } + ], + "processors":[ + [".dspy","dspy"], + [".md","md"] + ], + "session_max_time":3000, + "session_issue_time":2500, + "session_redis_notuse":{ + "url":"redis://127.0.0.1:6379" + } + }, + "langMapping":{ + "zh-Hans-CN":"zh-cn", + "zh-CN":"zh-cn", + "en-us":"en", + "en-US":"en" + } +} diff --git a/nvidia-asr.service b/nvidia-asr.service new file mode 100644 index 0000000..04d517f --- /dev/null +++ b/nvidia-asr.service @@ -0,0 +1,15 @@ +[Unit] +Wants=systemd-networkd.service + +[Service] +User=ymq +Group=ymq +Type=forking +WorkingDirectory=/share/ymq/run/nvidia-asr +ExecStart=/share/ymq/run/nvidia-asr/start.sh +ExecStop=/share/ymq/run/nvidia-asr/stop.sh +StandardOutput=append:/var/log/asr/asr.log +StandardError=append:/var/log/asr/asr.log +SyslogIdentifier=asr +[Install] +WantedBy=multi-user.target diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c864420 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +wheel +typing_extensions +numpy +nemo-toolkit[asr] diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..e22d1c1 --- /dev/null +++ b/start.sh @@ -0,0 +1,7 @@ +#!/usr/bin/bash + +rundir=/share/ymq/run/nvidia-asr +cd $rundir +CUDA_VISIBLE_DEVICES=6 $rundir/nvidia-asr.env/bin/python app/asr.py -p 9992 & +CUDA_VISIBLE_DEVICES=6 $rundir/nvidia-asr.env/bin/python app/asr.py -p 9992 & + diff --git a/stop.sh b/stop.sh new file mode 100755 index 0000000..ee227ad --- /dev/null +++ b/stop.sh @@ -0,0 +1,4 @@ +#!/usr/bin/bash + +/d/ymq/bin/killname asr.py +echo "asr.py killed"