语言处理 之 模型部署
conda的打包環境,自己壓縮解壓就好了
壓縮 tar -zcvf renwolesshel.tar.gz /renwolesshel
好,那怎么安裝呢?解壓縮
mkdir ~/.conda/envs/fastspeech2
tar? -zxvf ?fastspeech2.tar.gz ?-C ?~/.conda/envs/fastspeech2
那么我弄得docker_export就是,2個G的docker image,還行吧。
果然很危險啊。。。11TB,還剩下1TB,到底怎么可能呢臥槽。
看看我占用了多少吧。。。進入我的文件夾
du?-ah?--max-depth=1
100G了啊?!,F在53G了,看學姐的:
這算磁盤還是內存的?
wow學姐這個文件夾搞得,深切懷疑她搞到好幾個TB了。
整個達到了1.8T,最大的文件1.1T,差不多吧。
生成一個容器?sudo docker run -it --name test2 -p 8848:8848 ubuntu /bin/bash
一般來說數據庫容器不需要建立目錄映射
sudo docker run -p 8847:3306 --name fs2_mysql -e MYSQL_ROOT_PASSWORD=0320 -d mysql:5.7- –name:容器名,此處命名為mysql
- -e:配置信息,此處配置mysql的root用戶的登陸密碼
- -p:端口映射,此處映射 主機3306端口 到 容器的3306端口
- -d:后臺運行容器,保證在退出終端后容器繼續運行
詳細mysql在使用Docker搭建MySQL服務 - sablier - 博客園
多規劃你就需要端口管理。。使用dockerfile,規劃文件等。
這個中斷問題如何解決呢?
? 必然要用-it參數,這樣它就不像普通程序一樣,運行完就終止了。
- -i: 交互式操作。
- -t: 終端。
要退出終端,直接輸入?exit,從start關閉會直接關閉容器,但是exec后就不會了,主要run時要有-it
查看所有的容器命令如下:
sudo docker ps -a使用 docker start 啟動一個已停止的容器:
sudo docker start b750bbbcfd88 但是如果沒有正在運行的程序的話也會立即關閉,就相當于執行了一個程序而已進入容器
下面演示了使用 docker exec 命令。
sudo docker exec -it 08 /bin/bash 但是必須是正在運行的容器安裝conda,安裝fs
sudo docker cp ~/TTS_docker/Miniconda3-latest-Linux-x86_64.sh f:Miniconda3-latest-Linux-x86_64.sh
sudo docker exec -it f /bin/bash
chmod 777?Miniconda3-latest-Linux-x86_64.sh
./Miniconda3-latest-Linux-x86_64.sh
把環境裝進去,直接硬裝,東西都裝在root里面了
sudo docker cp ~/TTS_docker/fastspeech2.tar.gz f:/fastspeech2.tar.gz
tar -zxvf fastspeech2.tar.gz
導出容器用export就行,打包成鏡像最好
sudo docker export f > ~/TTS_docker/fastspeech2_docker_export.tardocker build與docker run的區別是什么?docker build只是,構建這個鏡像,并放到鏡像倉庫中,run是構建容器,并運行
Docker Compose 通過一個聲明式的配置文件描述整個應用,從而使用一條命令完成部署。Docker Compose 會使用目錄名(counter-app)作為項目名稱,Docker Compose 會將所有的資源名稱中加上前綴 counter-app_。
Docker Compose 會將項目名稱(counter-app)和 Compose 文件中定義的資源名稱(web-fe)連起來,作為新構建的鏡像的名稱。Docker Compose 部署的所有資源的名稱都會遵循這一規范。
如下命令列出了兩個容器。每個容器的名稱都以項目名稱(所在目錄名稱)為前綴。此外,它們還都以一個數字為后綴用于標識容器實例序號,因為 Docker Compose 允許擴縮容。
為什么找不到這個文件?而且還需要很長的時間。。。好慢啊。。。其實也不是很有必要啦。
命名規則原來如此啊。。。container_name可以指定名稱,
- 一個service可以擁有一個或多個container。
- container是docker的概念,因此我們在docker域里面,處理的是container。
- service是docker-compose概念, 因此我們在docker-compose域里面,才處理的是service。(當然docker-compose也能處理container)。
docker-compose start/stop處理的service name,而不是container name。
用docker就無法在后臺運行。。。天哪。。。
按理說我這個需求是不符合常理的,容器就是運行一個程序,運行結束后關閉,就是如此,我現在卻要求它,emmm,不能關閉。想想辦法吧。
docker容器運行必須有一個前臺進程, 如果沒有前臺進程執行,容器認為空閑,就會自行退出,這個是 docker 的機制問題。
網上有很多介紹,就是起一個死循環進程,讓他不停的循環下去,前臺永遠有進程執行,那么容器就不會退出了,但是你進入,還是一個新shell。
添加-it 參數交互運行
添加-d 參數后臺運行,但這是run的里面,我現在是docker-compose,emmmm,添加循環貌似是一個好的選擇。
一旦構建成功就會進入運行,這時候ctrl+c退出就可以了。
看來不行,得加上-u,可以,太棒了
不行啊,github還是慢啊。。。實在是太可憐了,買個。
NetworkManager和/etc/init.d/networking
在ubuntu系統中,我們分為ubuntu Server版本和ubuntu Desktop版本,在 Ubuntu Server中,默認使用interfaces管理網絡,而在ubuntu Desktop中,系統默認安裝NetworkManager,從而使用NetworkManager管理網絡服務。
啊,我明白了,ping不動的。。。是上層的東西。沒用。。。啊啊啊
sudo /etc/init.d/nscd restart只對?github.com
git config --global http.https://github.com.proxy socks5://127.0.0.1:1090
取消代理
git config --global --unset http.https://github.com.proxy
完全沒問題了。好活開整!也不賴,我只要改改就行了!
EXPOSE 指令是聲明運行時容器提供服務端口,這只是一個聲明,在運行時并不會因為這個聲明應用就會開啟這個端口的服務。在 Dockerfile 中寫入這樣的聲明有兩個好處,一個是幫助鏡像使用者理解這個鏡像服務的守護端口,以方便配置映射;另一個用處則是在運行時使用隨機端口映射時,也就是 docker run -P時,會自動隨機映射 EXPOSE 的端口。
要將 EXPOSE 和在運行時使用 -p <宿主端口>:<容器端口> 區分開來。-p,是映射宿主端口和容器端口,換句話說,就是將容器的對應端口服務公開給外界訪問,而 EXPOSE 僅僅是聲明容器打算使用什么端口而已,并不會自動在宿主進行端口映射。
docker里又不行了,映射了也沒用。。。
?Error starting userland proxy: listen tcp4 0.0.0.0:1090: bind: address already in use
根本就不能用,但是走代理應該沒問題。
沒法用啊。。。只能把vpn放到容器里面了。。。
成功了。
在/opt/kaldi
你必須在根目錄解壓fastspeech2
pip3 --no-cache-dir install torch -i https://pypi.tuna.tsinghua.edu.cn/simple/
cd /opt/kaldi/egs/xmuspeech/sre/subtools
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
容器打包成鏡像,在腳本里。
bash subtools/makeFeatures.sh enroll fbank conf/fbank_41_16k.conf/opt/kaldi/egs/xmuspeech/sre/wave
為啥二者不匹配呢?
subtools/computeVad.sh enroll conf/vad-5.0.conf我吐了。。。好好琢磨一下這個subtools的性狀
找到她那原語句了,跑跑她的語音
/work/kaldi/egs/xmuspeech/aishell3_test/
反正結果就是出現一個exp/features/fbank/這么一個目錄。
VoxCeleb是一個視聽數據集,由從上傳到YouTube的采訪視頻中提取的人類語音短片組成。
VoxCeleb1包含超過100,000個針對1,251個名人的話語,這些話語是從上傳到YouTube的視頻中提取的。
肝不動了肝不動了。。。只能緩緩,做前后端吧。這里留出來一個接口就足夠了。
from pydub import AudioSegment def mp3_to_wav(mp3_path, wav_path):song = AudioSegment.from_mp3(mp3_path)song.export(wav_path, format="wav") if __name__ == '__main__':mp3_to_wav('audio.mp3',"audio.wav")pip install pydub -i?Simple Index
可算TMD成功了。。。
接下來,哼哼。就比較硬核了,現在先告一段落,我要重新研究了。
這個文件夾怎么準備啊。。。emmm,放在哪里比較好?難道都放到static里面嗎?算了新開一個文件夾,叫mid_res,存放中間結果。
哇那真的太簡單了,比我預料的還要簡單。
使用system執行多條命令
- 為了保證system執行多條命令可以成功,多條命令需要在同一個子進程中運行;
bash subtools/makeFeatures.sh --nj 1 /work/kaldi/egs/xmuspeech/aishell3_test/cyxData/CYX210311prep/ fbank conf/fbank_41_16k.conf
bash subtools/computeVad.sh --nj 1 /work/kaldi/egs/xmuspeech/aishell3_test/cyxData/CYX210311prep/ conf/vad-5.0.conf
VAD,也就是語音端點檢測技術,是Voice Activity Detection的縮寫。這個技術的主要任務是從帶有噪聲的語音中準確的定位出語音的開始和結束點,因為語音中含有很長的靜音,也就是把靜音和實際語音分離開來,因為是語音數據的原始處理,所以VAD是語音信號處理過程的關鍵技術之一。
好吧又出現錯誤了,好事多磨啊。。。老子不干了。
說實話這個第一個腳本產出的路徑是不變的。。
cd /work/kaldi/egs/xmuspeech/sre_zws/
conda activate subtools1
模型的初始化就放到最開始就好了。
這個docker卡住好像是系統性的問題啊。。。
那么現在的話,重新載入到django里面試一試。
現在的話,要明白那個腳本
1. 這個點就好像,emmm,明白了,就是bash。
2. 這個path.sh實際上就是設定路徑的。
3.?在 shell 中執行程序時,shell 會提供一組環境變量。export 可新增,修改或刪除環境變量,供后續執行的程序使用。export 的效力僅限于該次登陸操作。就是設定了幾個全局變量而已。
4.?
我們知道,Bash 執行腳本的時候,會創建一個新的 Shell。
$ bash script.sh上面代碼中,script.sh是在一個新的 Shell 里面執行。這個 Shell 就是腳本的執行環境,Bash 默認給定了這個環境的各種參數。set命令用來修改 Shell 環境的運行參數,也就是可以定制環境。執行腳本的時候,如果遇到不存在的變量,Bash 默認忽略它。輸出了一個空行。set -u就用來改變這種行為。腳本在頭部加上它,遇到不存在的變量就會報錯,并停止執行。set一般用于腳本安全。
set命令的上面這四個參數,一般都放在一起使用。
# 寫法一 set -euxo pipefail# 寫法二 set -eux set -o pipefail這兩種寫法建議放在所有 Bash 腳本的頭部。
set -e從根本上解決了這個問題,它使得腳本只要發生錯誤,就終止執行。
我感覺這個腳本有大問題啊。。。這問題超大。。。
aug為頻譜augmentation
我聽過的最好的聲音就在/data/OB/TensorFlowTTS-master-new/TensorflowTTS-work-modify/predictions/wavs/pb_model/這里了。
好TM奇怪啊。。。就好像用的不是指定的模型一樣。。。
感覺像是環境的問題,畢竟所有的都不能用了。
sh環境能用,但python環境貌似不能用了。
無論如何,這個東西怎么來的?為什么我就添加不成功?
我TM把函數直接刪掉了,它還能跑。。。說明確實引用的不是我的模型。。。但怎么可能呢?它怎么調用的呢?
哦因為還有當前的這個目錄。
那我得看看訓練的有沒有正確訓練!我丟你大爺的,train也不是這個模型,應該是環境改了。。。那么這到底是怎么回事呢?環境變量就那么幾個,它是怎么實現連接到別處呢?
不僅說引用了她的,而且我的還被頂替了。。。這個問題簡直了。。。
不行,跟那個沒關系臥槽。都TM好像被重定向了。。。這可是真的神奇。。?,F在的癥狀就好像是,sys.path的/data/zhangweisong/TensorflowTTS_concat_big512/被換成別的
Python搜索模塊的路徑:
1)、程序的主目錄
2)、PTYHONPATH目錄(如果已經進行了設置)
3)、標準連接庫目錄(一般在/usr/local/lib/python2.X/)
4)、任何的.pth文件的內容(如果存在的話).新功能,允許用戶把有效果的目錄添加到模塊搜索路徑中去
.pth后綴的文本文件中一行一行的地列出目錄。
這四個組建組合起來就變成了sys.path了,
放到開頭,那成功了呀。成功了呀。
接著做做加到encode之前吧。。。
不見得刪除哈。它encoder和decoder部分都有speaker id加入的。。。
在encoder之前,而不是encoder之中。從另外一個方面來說,input_id就是文本信息嗎?應該是的。
這個embedings還蠻重要,就是這里了!或者在這下面也說不定。它繼承自TFFastSpeechEmbeddings,這只是一個layer。它的功能一是加上position embedded,二是加上speaker id。
在這里面加不是好選擇,在后面加上吧。我只需要關心一下config就好了。encoder的輸入要改一下。
這是挨個漲的,就好像,這個embeds找不到長度,而且encoder也不知道輸入長度,難道是等長的?
wtf?成功了?哦明白了,八成用的是同一個參數。
果然吶,操。我覺得應該沒問題了。
我發現,對于inference,有時候是一個一個的,有時候是一batch一batch的。。。
說實話這感覺很微妙。。。
接著搞,如果要好好搞的話,只需要
一個模型,兩個fs.py,一個config,修改一下py文件,ok
啊哈,不行了,因為xvector不行了。明天再說吧。。。
沒問題了,現在是好的melgan
一個模型,一個config,沒了。。。
/sre_zws/data/myData/tone.wav
改成one_dragon.sh,一條龍。。。
post_process.py,提取,轉移xvector
sre_zws/exp/ftdnn_xv_train_4kh_aug_warmR_fbank_41_16k_pytorch/far_epoch_18/mydata/
far_epoch_18/mydata/xvector.1.ark:5
看來上傳的文件不行啊。。。
加油,快贏了。
我需要:模型,config,兩個文件,注意改一下
上傳,他媽的卡住了。。。不行,遭不住。。。
基本做完了,完成度比較高,真是有點愛不釋手啊。。。
總結
以上是生活随笔為你收集整理的语言处理 之 模型部署的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 红色警戒2修改器原理百科(二)
- 下一篇: 用 zotero 管理文献和个人知识库