carpedm20 / multi-speaker-tacotron-tensorflow

Multi-speaker Tacotron in TensorFlow.
http://carpedm20.github.io/tacotron
Other
632 stars 341 forks source link

training이 잘 안됩니다. #4

Closed twonine1 closed 6 years ago

twonine1 commented 6 years ago

샘플로 주신 prepare_jtbc.sh을 실행해 만든 audio data를 가지고 single speaker로 20만 step이상 학습을 진행했는데도, 여전히 음성이 제대로 안 나옵니다. 문제가 뭔지 알 수가 없습니다. 혹시 제대로 음성이 나오는 분 계신가요?

nucleiis commented 6 years ago

저도 마찬가지입니다. Son, Park, Moon 전부 마찬가지.. 공개하신 코드가 multispeaker까지 작업하신거라 single 모델로는 안되는 상태 같아요

lenzefx commented 6 years ago

저도 마찬가지 입니다. 전 son, moon에 대해서 single로 각각 20만 Step 해봤는데 첫 음절조차 나오지 않습니다. nucleiis님께서 말씀하신것 처럼 single 모델은 안되는것 같아 son+yuinna+moon+park 을 multispeaker로 (파라미터에서는 Deepvoice로 설정) 20만 step 돌려봤지만 동일하네요.

20만 Step정도 돌리니 Avg Loss는 0.08441 정도 나옵니다. (1 Step당 1.3~1.5초 정도소요)

비교대상이 없으니 제 Avg Loss와 Step당 소요시간이 이상한지도 모르겠네요.

혹시 성공하신 분 계신가요?

nucleiis commented 6 years ago

오늘 PC를 1080Ti로 업그레이드하고 다시 들여다보니까, score=0.5로 처리된 데이터에 문제가 많은것 같습니다.

tacotron 학습을 잘하려면 텍스트하고 음성 길이를 잘 맞춰줘야하는데 alignment.json 에 있는 스크립트는 절반 이상 엉망이네요. 처리하면서 2문장이 하나로 합쳐지고 난리...

오늘 수작업으로 wav 들으면서 좀 정리하니까 son 같은 경우 3만개중에서 12000개 정도나 건질만해서, 이걸로 데이터를 줄인다음에 다시 돌려보는중입니다.

lenzefx commented 6 years ago

정렬 문제일 수도 있겠지만, 전 Attention 문제일수도 있다고 생각이 드네요.

아래 화면은 멀티스피커를 이용하여 약 10만 Step까지 돌린 화면입니다.(son+moon+yuinna) 대략 15,000 Step 부터는 거의 비슷한 스펙트럼을 보입니다. test-step-000105000-align007

태훈님 발표영상을 보면 위 이미지와 거의 유사한 화면 설명하는 장면이 있는데요.... 원인이 Attention이라고 하네요. 그래서 전 지금 Attention 부분과 하이퍼파라메터 부분을 계속 보고 있습니다.

nucleiis님 께서도 혹시나 개선되거나 성공하신다면 꼭 결과 부탁드립니다.

engiecat commented 6 years ago

저는 single speaker로 https://github.com/keithito/tacotron이랑 동일하게 parameter맞춰서(거기는 reduction factor이 5로 잡혀있더라고요) 110k step 정도 돌려봤는데 아주 느리게 alignment가 잡히네요.

https://i.imgur.com/7CSbjKX.png

일단 한 처음 2~3음절 정도 들리는 상태이고 일단 200k step까지 돌려볼 예정입니다.

engiecat commented 6 years ago

지금 160k step 정도 왔는데, 첫 두 단어 정도 들리는 상태입니다. (아래 그림에서는 "실제로 그동안" 까지) 근데 정말 학습 속도가 느려서 제대로 되는 건지는 의문이네요. ` test-step-000162500-align000

`

lenzefx commented 6 years ago

다른 사례를 보니 일반적으로 20k 부터는 어느정도 전체 스팩트럼이 나와야 하는 것 같습니다. 160k인데 저정도면 개인적으로 다른 문제가 있지 않나 생각이 드네요. 전 현재 각종 파라메터를 하나씩 수정해보고 20k Step씩 진행 후 결과를 보고 있는데요, 20K 돌리는 것도 6시간 정도걸리는 상황이라 이것도 엄청난 시간과 노력을 요하네요.

혹시 파라메터 수정하시는 분들 설정 값을 서로 공유해서 해보는건 어떨까요?

engiecat commented 6 years ago

지금 다른 컴퓨터로 reduction_factor를 4(이 자료에 나와있는대로)로 맞춰보았는데 확실히 5(keithito/tensorflow)일때 보다 성능이 떨어지는 듯 하네요. (single speaker 기준) reduction factor: 4 test-step-000031000-align000

reduction factor 5 test-step-000031000-align000

nucleiis commented 6 years ago

@lenzefx 20K부터 스펙트럼이 나온다는건 아니고 웅얼웅얼 사람 목소리처럼 들리기 시작한다고 하더라구요. 근데 거기 batch size가 32라서 우리는 16이니까 40K step에서 웅얼웅얼 사람 소리가 들리는거라는거죠. 그 기준면 우리쪽도 큰 문제는 없는것 같습니다. 단순히 dataset의 품질이 떨어지고 한국어의 음절이 많아서 더 오래걸리는것일 수도..

engiecat commented 6 years ago

Single Speaker은 일단 parameter 찾은 것 같습니다. hparams.py에서

elif True: # Single Speaker
    basic_params.update({
        'dropout_prob': 0.5,
        'attention_size': f(128),
        'post_bank_channel_size': f(128),
        #'post_rnn_size': f(128),

        'reduction_factor': 5, #여기를 4에서 5로 변경하였습니다.
    })

부분이랑

basic_params.update({
    # Training
    'batch_size': 32, # 여기를 16에서 32로 변경하였습니다.
    'adam_beta1': 0.9,
(후략)

부분을 수정하면 한 5500 step부터 전체 스펙트럼이 나오네요. test-step-000005500-align000

9500스텝까지 하니 이정도로 나옵니다. test-step-000009500-align000

Tesla P40에서 Step당 한 2초 정도 걸립니다. (기존 코드의 경우 약 1초)

hparams.py 보면 multispeaker에서도 마찬가지로 reduction_factor이 4로 batch_size가 16으로 잡혀있는데 이걸 수정해서 테스트해보는것도 해볼 만 할것 같아요.

lenzefx commented 6 years ago

@engiecat 정보 감사합니다.

전 지금 batch_size 32, initial_learning_rate 0.001로 학습하고 있습니다. 현재 30k 정도 학습했는데요, Train 목소리가 좀 더 선명해진것 말고는 아직 큰 변화는 없네요. (위 설정으로 학습시 loss가 널뛰지 않고 안정적으로 서서히 줄어듭니다.)

E5-2690v2, GTX 1080ti 구성시 2.5초 정도 소요됩니다.(Batch_size를 16로 했을시 약 1.5초 정도 소요)

P40 부럽습니다. :-)

nucleiis commented 6 years ago

batch_size 16에서 step을 2배 더 돌리면 batch_size 32인것과 같습니다. batch_size를 늘리니까 step당 걸리는 시간이 늘어나는것도 그래서 그런건데 거꾸로 얘기하면 별로 의미가 없습니다.

또 step당 걸리는 시간은 dataset에 있는 음성 pair의 갯수에 따라서 길어지고 짧아지고 하는거라서 단적으로 step당 몇초다 라고 얘기하는 것도 의미가 없습니다. 서로 다른 크기의 data를 training 하고 있을 수 있으니까요. 예를 들어 저는 batch_size 16, dataset 13000개 (son)을 1080ti로 돌릴때 step당 0.5초 정도 나오는데 데이터를 3배 늘리면 그만큼 오래 걸리죠.

twonine1 commented 6 years ago

DEVIEW2017 VOD(http://tv.naver.com/v/2292650) 내용 중에 28:20부분에 multi speaker로 학습시킨 4개의 attention graph를 보여주면서, 아래쪽 두 개의 경우에 attension graph가 출렁이는 이유가 오디오 파일의 처음부터 말이 시작되지 않아서 그렇고, single로 하면 학습이 잘 안된다고 설명하는 내용이 나옵니다. 그래서 저는 data를 만들기 전에 audio 파일을 앞과 뒤의 묵음 구간을 제거하고 시험해보고 있는데, 200K step 정도 돌렸는데, 합성해보면 그래도 어느 정도 알아들을 수 있는 소리는 나옵니다.

앞뒤 묵음 구간을 제거하기 위해 librosa.effects.trim()을 사용했습니다. test-step-000200000-align000

a3626a commented 6 years ago

@twonine1 앞뒤 묵음 구간은 audio/slience.py를 돌리면 같이 사라지지 않나요?

twonine1 commented 6 years ago

@a3626a audio/silence.py를 돌린 후에 실제 나온 *.wav 파일을 보면 앞에 80ms 정도의 묵음 구간이 보입니다.

nucleiis commented 6 years ago

@twonine1 와 그건 생각도 못했네요. 혹시 200k에서 어떻게 들리는지 test 샘플 하나 들려주실 수 있나요? single로 어떤 dataset 하시는지도 궁금하네요

twonine1 commented 6 years ago

@nucleiis 저는 회사에 있는 별도의 음성 data를 사용하고 있습니다. jtbc data는 받아놓고 아직 테스트는 못해봤습니다. sample.zip

nucleiis commented 6 years ago

@twonine1

와 이정도면 완벽하네요. 상용 Amazon Polly 보다 좋아보입니다. 혹시 사용하신 datasets 밑에 wav 데이터 갯수가 몇 개 정도 되는지 혹은 총 시간을 알 수 있을까요?

위에서 여러 시도가 이어지는데 앞뒤 trim은 매우 중요한 것 맞고, 그 외에 batch_size나 reduction_factor 같은것은 의미가 없을 수 있다고 보거든요. reduction_size 조절하게 되면 필터링 min-max 구간이 넓어지기 때문에 데이터량을 늘리는 효과가 있어서 사실상 그 파라메터 보다는 원본 데이터가 부족해서 잘안되는 것 아닌가하는 생각입니다. 마찬가지로 회사에 갖고 계신 음성data의 품질이 높고 시간이 많아서 잘되는것 같고요.

twonine1 commented 6 years ago

@nucleiis 제가 보내드린 샘플의 학습에 사용된 data수는 train.log 파일에 있는 것을 기준으로 보면, 6372개(10.62시간)입니다. reduction_factor와 batch_size를 말씀하신대로 수정하고 학습시켜보면, 기존보다 더 빠르게 학습이 되는 것 같습니다. 학습시간도 중요한 부분이라 생각되며 효과는 있는 것 같습니다.

nucleiis commented 6 years ago

@twonine1 지금까지 나와있는 개선안을 모두 적용해서 son 모델 single, 11k 스텝인데 아주 잘되고 있는것 같습니다.

  1. reduction factor = 5, batch size = 32
  2. librosa.effects.trim 적용
  3. (추가 작업) wav-txt 수작업으로 걸러냄, 주로 인터뷰나 긴 음악이 삽입된 애들을 제거..총량 2/3 정도
  4. (추가 작업) wav를 mono로 변경
  5. (추가 작업) wav를 normalize 처리함
  6. (추가 작업) min-max iteration 구간을 늘림

test-step-000011500-align001

lenzefx commented 6 years ago

twonine1 님께서 말씀하신 alignment 파일을 보니 Google API에서 변환한 텍스트는 정말 엉망이더군요. 사용할 수 있는 양이 절반도 안될정도입니다. moon 같은 경우 그럭저럭 쓸만하지만 son 은 절반이 말도안되는 말이 쓰여있네요. 일단 데이터양이 적은 moon dataset에 대해서 수작업으로 wav파일을 들으면서 txt를 수정하고 있는데요, 1/3정도만 수정했음에도 확실히 차이가 나긴하네요. (다른 작업은 하지않았습니다.)

alignment.json 파일을 완벽하게 만들고 여러 가지 개선안을 적용하면 만족할만한 결과가 나올것 같네요.

@twonine1 혹시 iteration min-mix 구간 설정하는 규칙이 있나요?

nucleiis commented 6 years ago

@lenzefx 얼라인먼트는 제가 얘기드린 부분인데 구글api는 문제가 없고 score=0.5로 매칭해주는 부분이 문제입니다. 보면 짧은 구문 두 개를 붙여서 길게 만드는 경우가 많은데 이렇게 하면 attention을 못잡게 됩니다.

min max는 그냥 본인이 자른 음성 길이만큼 조절하면 됩니다.

twonine1 commented 6 years ago

@lenzefx min-max iteration에 대한 것은 아직 시험해보지 못했습니다. max를 늘리면 길이가 긴 음성파일도 training에 포함시키게 되겠죠?

nucleiis commented 6 years ago

160k step 정도 돌렸는데 어미에서 -합니다, -입니다 등이 잘리거나 다른 발음을 하는 오류가 많이 나오네요. 쇳소리도 좀있고... ㅠㅠ

음성-텍스트 pair 다시 점검해보니 "합니다", "입니다"에서 score=0.5 매칭으로 인해 잘못 들어가 있는것이 잔뜩 나와서 이것들 또다시 수작업으로 손봐주고 다시 돌리고 있습니다... 이정도 수작업할거였으면 아예 alignment + recognition 작업을 하지말고 recognition 쪽으로 넣는 게 더 나았을지도 모르겠다는 생각이 드네요.

lenzefx commented 6 years ago

@nucleiis score 문제도 있겠지만, 개인적으로 원시자료 및 google api 텍스트 변환 문제도 있는듯 합니다.

전 현재 wav 파일을 일일히 들으면서 alignment.json 파일을 수정하고 있는데요, 수정하면서 보니 google api에서 변환한 텍스트에도 많은 문제가 있더라구요. 예로) 원시자료 : 존경하는 국민 여러분 , GoogleAPI : 존경하는 개미 여러분

이런게 어쩌다 한 두개가 아니라 40% 정도 되네요. 보다보면 웃긴 표현도 많이 나옵니다. 이러다보니 제대로된 학습이 안되는 같습니다.

추가로, son의 원시자료를 들어보면 "~입니다" 부분을 아주 짧고 빠르게 그리고 작게 말하는 곳이 많습니다. 이 부분을 API가 변환한 TXT로 보면 대부분 "~임" 으로 인식하는 경우가 비일비재 했습니다. 이것도 원인일 수도 있을거란 생각이 드네요.

전 이제 4,000번째 텍스트 수정중인데요, 일단 10,000개 까지만 해보고 결과가 좋으면 전체 데이터를 모두 수정해보려고 합니다.

nucleiis commented 6 years ago

@lenzefx 저는 node.js로 별도 코드 짜서 그런식으로 차이가 많이 나는 것은 다 없애버렸습니다. son 같은 경우는 그런식으로 2/3 정도를 날려버린 다음에 남은 것으로 하다보니까 구글API는 문제 없는것처럼 생각하고 있었네요.

~입니다 부분은 실제로 wav를 들어보면 ~임으로 들리는 수준이라서 저 같은 경우는 ~임으로 들리는 부분은 전부 텍스트를 ~임으로 바꾼다음에 다시 돌리고 있습니다.

지금 97k 정도 돌고 있는데 전보다 훨씬 들어줄만합니다.

test-step-000097000-align001

lenzefx commented 6 years ago

@nucleiis 혹시 지금 Train에 사용되는 파일이 몇 개정도 되시는지 말씀해주실 수 있나요? 2/3 정도를 날리셨다고 하셨는데요, 그 정도면 워낙 데이터가 적어 학습이 될지 의문이라서요. (데이터가 적음에도 불구하고 그래프를 보니 이상적인 기울기가 나오네요)

son은 애초에 약 60,000개의 데이터가 있는데, 결과물의 퀄리티를 위해 이걸 모두 제대로 수정하려면 두 달 이상이 걸릴것 같습니다. T.T

nucleiis commented 6 years ago

@lenzefx 약 12,000개 정도 페어로 돌리고 있습니다. 10시간 분량인데 unseen 돌려보면 꽤 잘 나와서 이정도 데이터량이 크게 부족한건 아닌것 같습니다.

추가로 지금까지의 loss 그래프인데 수렴하고 있는걸 보면 이정도 데이터로 학습한 후 결과물을 들어보고 문제점을 개선하는 게 나쁘지 않은 전략인 것 같습니다. 이를테면 -합니다, -입니다, -이며, 이런 어구들이 다른 것보다 훨씬 크리티컬하다는걸 결과물 들어보고 알 수 있었거든요.

image

nucleiis commented 6 years ago

single로 son 600k 까지 트레이닝했는데 test 결과는 아주 좋지만 unseen 문자열은 썩 잘 읽지 못합니다. "예쁘다" 같은 unseen 단어를 "예으다"로 읽거나 아예 엉뚱하게 한음절을 없애버리는 등 사용하기에 모자란 부분이 있습니다. 추가로 트레이닝을 더 한다고 좋아지는 게 아니라 오히려 나빠지기도 해서 갸우뚱합니다.

구글 논문 보면 특정 스텝 넘어가면서 learning rate를 낮춘다고 하는데 그걸 안해서 그런 것인지.. 아니면 손석희 앵커가 어미를 축약해서 빠르게 발음해서 학습이 안되는건지.. 둘중 하나인데.. 원인은 모르겠습니다.

일단 son은 거기까지 하고 deep voice 모델로 son+park해서 다시 230k 정도 트레이닝 돌리고 있는데 park의 발음이 상당히 괜찮게 나오네요. 본래 화자가 책읽듯이 발음하는 편이라서 잘되는 것 같습니다.

2017-12-30_13-50-13 manual https://www.dropbox.com/s/2etisr5wbzle8yv/2017-12-30_13-50-13.manual.wav?dl=0

lenzefx commented 6 years ago

@nucleiis 결과가 상당히 좋네요. 부럽습니다. ^^ 다른 포럼의 내용을 보니 learning rate는 0.001로 하는것이 더 좋다는 의견이 더 많은것 같습니다. 그래서 전 0.001로 셋팅해서 하고 있습니다. 그리고 말씀하신 부적절한 단어.. 이게 참 어려운 문제인것 같습니다. 원시자료에서 잠시 말문이 막히거나 축약해서 말한단어 이런것들은 전부 제거하고 있는데요, 이것이 실제 효과가 있을런지 의문입니다. 현재 8000번째 텍스트를 수정하고 있는데요 조금 더 진행해보고 효과 있으면 결과를 한 번 올려보도록 하겠습니다.

그리고, 수작업을 통해 모든 음성에 대해 text를 정확하게 옮겨놓았기 때문에 모든 음성을 참조하기 위해 min max iters 값을 각각 30/1319로 설정했는데요, 생각보다 효과가 없는것 같네요.(전 두 긴 문장의 음성도 모두 넣었거든요)

arizona95 commented 6 years ago

hparams.py 에서

image

Single Speaker 부분이 False 라고 되있는데 TRUE 로 바꿔주어야 하나요?

arizona95 commented 6 years ago

그리고 다른 포럼에서 이 주제를 다루고있나요? 링크좀 주실수 있나요 ㅠㅠ

그리고 librosa.effects.trim 은 인자로 몇db 를 주어야하나요? 저는 그냥 기본으로 50 db 를 이용했는데..

트레이닝 하다보니까 어텐션 학습이 잘 안되더라구요

engiecat commented 6 years ago

저는 일단 어미(~니다. ~니까) 발음 잘 못하는 문제를 막기 위해서 alignment를 아예 무시하고, recognition으로만 training을 진행했는데, 굉장히 naive하게 접근한 것 치고는 그럭저럭 되는 것 같습니다. 다만, 아무래도 recognition만으로는 한계가 있기 때문에 부자연스러운 억양이 느껴지기는 합니다. 제대로수작업으로 작업하면 좋은 결과를 얻을 수 있을 것 같습니다.

아래에 son으로 66k step 만큼 훈련한 결과를 첨부합니다. 8d0097ff6f5a431bda650b2b09ba1fd5 0 manual

https://www.dropbox.com/s/g3h92jbulagkx8c/son-test.wav?dl=0

또한 Son으로 66k step만큼 훈련 진행한 후 park으로 26k step 만큼 훈련시킨 결과를 첨부합니다. 8d0097ff6f5a431bda650b2b09ba1fd5 0 manual

https://www.dropbox.com/s/1o908ss1046tk1a/park-test.wav?dl=0

그리고 위에 훈련시킨 결과에서(특히 park의 경우) 음성 뒷부분에 지직거리는 소음이 들어가는데, 혹시 이런 문제는 다들 어떻게 해결하시는가요?

engiecat commented 6 years ago

@arizona95 single speaker하실때는 원래 true 되어있는 곳 false로 바꾸시고 말씀하신대로 표시한 부분을 true로 바꾸시면 됩니다. 그리고 다른 포럼은 아마 https://github.com/keithito/tacotron/issues 여기 말씀하시는 것 같아요. 본 코드가 저기에 기초하고 있기도 하고, 저도 저길 참조해서 파라미터 바꾸기도 했습니다.

lenzefx commented 6 years ago

@engiecat 원시자료에서 인터뷰, 음악 부분만 제거하면 recognition 만 가지고도 어느 정도 퀄리티가 나올 것 같습니다. 그런데 batch size를 32로 했을경우 GTX1060 에서 1초 정도가 나오나요? 전 GTX 1080ti 임에도 1초 중후반대가 나오거든요.

@arizona95 github에서 tacotron 검색해 보시면 커뮤니티가 잘 형성된 몇 곳이 나옵니다. 그곳 내용을 잘 보시면 도움 될만한자료를 얻으실 수 있습니다.

engiecat commented 6 years ago

@lenzefx 조언 감사드립니다. 내일 한번 관련 부분 제거하고 해봐야겠네요. 그리고 1초 정도로 나오는게 맞는 것 같습니다. (Single Speaker, batch size 32, reduction factor 5) 지금도 하나 돌리고 있는데 이렇게 뜨네요. 32batch-gtx1060

nucleiis commented 6 years ago

@lenzefx @engiecat 위에도 몇번 비슷한 얘기가 오갔는데 step당 걸리는 시간은 데이터양에 비례하는건데 지금 돌리시는 데이터셋이 moon 이라서 데이터량이 훨씬 적습니다. 그래서 그런거...

lenzefx commented 6 years ago

@nucleiis 저도 처음엔 데이터셋 양에 따라서 속도 차이가 있는것으로 알고 있었는데요, moon, son, park, yuinna 모두 비슷한 속도가 나오네요 ^^ 병목현상이 생기는 무언가가 있는것 같습니다.

@engiecat 네이티브 리눅스 환경에서 1초대 중반이고, 윈도우 환경에서는 무려 3초 중후반대가 나옵니다. 다른 문제를 한 번 찾아봐야겠습니다. ^^

nucleiis commented 6 years ago

@lenzefx 아니면 min+max filter에 의해서 걸러진 데이터가 차이나서 그럴수도 있습니다.

저는 son+park을 돌리는데 걸르는 기능은 껐고, 원본 데이터중 상당히 많은 부분을 지우거나 없애서 지금 son 9056개, park 4304개를 돌립니다. 합이 13,360개의 예제를 돌리고 있는데 step당 걸리는 시간은 0.77초입니다. 윈도우10 + 노오버 1080Ti + 8700K

lenzefx commented 6 years ago

@nucleiis 의견 감사합니다. 속도에 영향을 미칠 수 있는 영향 등을 한번 찾아봐야겠습니다. ^^ 다른 하드웨어적인 자원에는 이상없는걸로 봐서 말씀하신 결과 데이터의 차이일 수도 있다는 생각이 드네요.

sample

nucleiis commented 6 years ago

@lenzefx 지금 보여주신 스샷은 checkpoint 복원하고 처음으로 돌리는 장면 같은데요, 처음이니까 cache miss가 나기 때문에 느린것이고 좀 지나면 엄청나게 빨라집니다. 한 5분 정도만 돌리시면 1초대 언더로 돌아갈 것 같습니다.

lenzefx commented 6 years ago

@nucleiis 아^^ 윈도우 환경에서 어느정도 속도가 나는지 잠시 보여드리려고 시작부분을 캡처한 것입니다. Moon 데이터인 경우 하루를 돌려도 2초 중반에서 줄지 않습니다. ^^(네이티브 리눅스인 경우 1초 중반) 전 E5-2690v2 + 1080ti 조합입니다. (어차피 AVX 명령어 셋을 사용하지 않기 때문에 CPU 부분도 큰 의미가 없을것 같은데... 참 이상합니다 ^^)

nucleiis commented 6 years ago

@lenzefx 어우 2초중반이면.. 너무 차이나네요;; 데이터도 적은데 다른 머신대비 50% 이상 느린거면 전원설정이 절약모드라던가... 뭔가 있는것 같습니다.

lenzefx commented 6 years ago

@nucleiis 맞습니다. 50% 속도면 하루면 끝날 작업이 이틀이 걸리니까요. 말씀하신 전원 부분이나 GPU 코어 클럭도 다시 한 번 확인해봐야겠습니다. (※ 휴일 늦은시간인데 피드백 감사합니다. ^^)

lenzefx commented 6 years ago

@nucleiis @engiecat 혹시 CUDA와 cuDNN 몇 버전 사용하고 계신가요? 아마도 버전에 따른 퍼포먼스에 문자가 아닌가 생각이 듭니다. 현재 제 환경은 Python 3.6 / Tensorflow 1.3 GPU / CUDA Toolkit 8 / cuDNN 6.0 입니다.

그리고 학습시 GPU의 Compute_0 필드는 아래 그림처럼 25~35%만 사용하네요. (이때 GPU 클럭은 약 2Ghz로 풀로 돌아가고 있습니다.) 2

전 윈도우 환경은 리눅스 보다 GPU가 처리해야할 작업이 많아 느린것으로만 알고 있었는데... 올려주신 신용을 보니 제가 잘못알고 있었네요.

engiecat commented 6 years ago

@nucleiis

son 훈련할때 로그를 봐도 약간 느리지만 비슷한 정도로 나오는 것 같습니다. 그렇지만 저는 max_iter을 조절을 안한상태로 돌려서(늘리니까 OOM 오류가 뜨더라고요) 그게 원인일 수도 있을 것 같네요. [2018-01-01 01:08:45.390] Step 42777 [1.206 sec/step, loss=0.08067, avg_loss=0.08001] [2018-01-01 01:08:46.220] Step 42778 [1.201 sec/step, loss=0.08266, avg_loss=0.08000] [2018-01-01 01:08:47.251] Step 42779 [1.201 sec/step, loss=0.08051, avg_loss=0.07999] [2018-01-01 01:08:48.093] Step 42780 [1.202 sec/step, loss=0.07983, avg_loss=0.08000] [2018-01-01 01:08:48.848] Step 42781 [1.199 sec/step, loss=0.07934, avg_loss=0.07999] [2018-01-01 01:08:50.416] Step 42782 [1.204 sec/step, loss=0.08072, avg_loss=0.07997] [2018-01-01 01:08:53.051] Step 42783 [1.223 sec/step, loss=0.06622, avg_loss=0.07984] [2018-01-01 01:08:54.021] Step 42784 [1.205 sec/step, loss=0.08036, avg_loss=0.07991] [2018-01-01 01:08:59.312] Generated 32 batches of size 32 in 15.524 sec [2018-01-01 01:09:00.581] Step 42785 [1.263 sec/step, loss=0.08079, avg_loss=0.07993] [2018-01-01 01:09:01.835] Step 42786 [1.265 sec/step, loss=0.08386, avg_loss=0.07996] [2018-01-01 01:09:02.503] Step 42787 [1.263 sec/step, loss=0.07975, avg_loss=0.07996] [2018-01-01 01:09:03.329] Step 42788 [1.261 sec/step, loss=0.07976, avg_loss=0.07995]

근데 nvidia-smi로 찍어보니 한참 돌리는 와중에 GPU Utilization이 많아도 50%를 못넘는데, 다른데서 병목이 생겨서 그런거려나요?

engiecat commented 6 years ago

@lenzefx @nucleiis 갱신이 된걸 모르고 뒷북을 쳤네요. 죄송합니다. 일단 제 세팅은 Anaconda 3.5+CUDA 8.0 GA2(Patch 적용)+CUDNN 6+Tensorflow-gpu 1.3.0입니다. 하드웨어는 E3-1245v3+GTX1060 6GB 이고요.

저는 max_iter, min_iter 기존 세팅대로 잡고 (200, 30) alignment자체를 안하고 진행한지라 son은 10015개 샘플로 진행하였습니다.

일단 moon으로 진행하고 있는 중이긴 한데 여기에서도 compute_0는 60프로 정도밖에 안찍는것 같습니다. noname

nucleiis commented 6 years ago

@lenzefx @engiecat 제가 지금 deep voice 설정을 돌리고 있는데 single 보다 network size가 커서 좀 높게 나올거라 생각하는데.. nvidia smi 평균적으로 60%를 보여주고 37~95% 사이를 오갑니다 (1080Ti) 다른 tensorflow 코드들 보다 batch size가 작아서 1080Ti로 gpu bound 는 안되는것 같아요.

arizona95 commented 6 years ago

오오 저도 싱글스피커 성공했습니다.. 그냥 데이터 질의 문제였던것 같아요

근데 제가 궁금한게, 하나의 완벽한 A사람의 60시간짜리 데이터와 B 사람의 85?% 정도 일치하는 10시간짜리 데이터를 학습시키려면,

  1. A 60시간짜리를 우선 single 모드로 학습시킨 후 나온 model 을 가지고, B 를 학습시킬때 pre-trained model 으로 사용하여 B 의 학습을 진행시킨다.

  2. A 60시간, B 10 시간 짜리를 deep voice2 로 학습 진행시킨다.

둘중 무슨 방법을 택해야 하나요?

twonine1 commented 6 years ago

@arizona95 용도에 따라 다를 것 같습니다. A와 B를 서로 다른 시스템에서 각각 서비스 한다면, 첫번째 방법을 쓰고, 하나의 시스템에서 A,B를 다 서비스 한다면 두번째 방법을 쓰면 될 것 같습니다.