AI Voice Conversion Project(음성 합성 모델) #3: 모델 로컬화

2024. 3. 26. 15:29·MLOps/MLOps projects

지난번에 이어 이번에는 그래서 현재 google Colab에 올라가 있는 모델을 어떻게 로컬화를 시켰는지 이야기하고자 한다.

# 코드의 로컬화

사실 이 로컬화 하는 과정에서 가장 많은 시간과 오류에 마주쳤었다. 

딥러닝 모델을 탑재한 google colab은 특성상 코드를 돌리는 것이 아닌 실제 실행되는 코드를 gui로 겉이 포장되어 있다.

 

예를 들어 아래와 같이 데이터를 전처리하는 부분이 아래와 같다면.

 

이를 굳이 process data를 누르지 않고도 데이터가 업로드 되면 자동으로 데이터를 전처리 해줄 수 있도록 해줘야한다. 

즉 하나하나 코드를 다 까보고 함수를 뒤져서 찾아내야한다는 것이다. 

심지어 코드 주석이 전부 중국어로 되어 있어서 파파고까지 돌려가며 했다는 사실..

 

예를 들어 위 gui를 까면 아래와 같이 gradio 문법으로 구성이 되어 있다.

with gr.Group():  # 暂时单人的, 后面支持最多4人的#数据处理
    gr.Markdown(
        value=i18n(
            "step2a: 自动遍历训练文件夹下所有可解码成音频的文件并进行切片归一化, 在实验目录下生成2个wav文件夹; 暂时只支持单人训练. "
        )
    )
    with gr.Row():
        trainset_dir4 = gr.Textbox(
            label=i18n("输入训练文件夹路径"), value="E:\\语音音频+标注\\米津玄师\\src"
        )
        spk_id5 = gr.Slider(
            minimum=0,
            maximum=4,
            step=1,
            label=i18n("请指定说话人id"),
            value=0,
            interactive=True,
        )
        but1 = gr.Button(i18n("处理数据"), variant="primary")
        info1 = gr.Textbox(label=i18n("输出信息"), value="")
				
				# 버튼이 눌러졌을 때 실행되는 부분, (Process data 버튼)
        but1.click(
            preprocess_dataset,
            [trainset_dir4, exp_dir1, sr2, np7],
            [info1],
            api_name="train_preprocess",
        )

여기서 가장먼저 해줘야할 작업은 버튼, gradio group등으로 묶여진 것을 전부 풀어주고, 

메인 실행 함수를 찾아 자동화 시켜줘야한다. 위 예제는 가장 간단했기 때문에 코드를 좀만 읽어 보아도 but.click에 들어가 있는 코드 블럭이 메인 실행함수인것을 알 수 있다. 


때문에 우리는 버튼을 누르지 않고 info1 = preprocess_dataset(trainset_dir4, exp_dir1, sr2, np7)  처럼 한번에 알아서 자동적으로 실행되도록 만들었다. 

아래는 변환된 코드이다.

def preprocess_dataset(trainset_dir, exp_dir, sr, n_p):
    sr = sr_dict[sr]
    os.makedirs("%s/logs/%s" % (now_dir, exp_dir), exist_ok=True)
    f = open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "w")
    f.close()
    cmd = (
        config.python_cmd
        + ' trainset_preprocess_pipeline_print.py "%s" %s %s "%s/logs/%s" '
        % (trainset_dir, sr, n_p, now_dir, exp_dir)
        + str(config.noparallel)
    )
    print(cmd)
    p = Popen(cmd, shell=True) 
    done = [False]
    threading.Thread(
        target=if_done,
        args=(
            done,
            p,
        ),
    ).start()
    while 1:
        with open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "r") as f:
            yield (f.read())
        sleep(1)
        if done[0]:
            break
    with open("%s/logs/%s/preprocess.log" % (now_dir, exp_dir), "r") as f:
        log = f.read()
    print(log)
    yield log

 

이런식으로 모든 코드를 변환시켜주는데 쉬엄쉬엄해서 2주 가량 걸렸던것 같다.. (물론 팀원 한분의 도움을 많이 받아서..^^)

 

# 코드의 로컬화 필요성

그래서 왜 로컬화를 해야하냐. 왜냐면 나 또한 요청이 올때마다 google Colab에서 자동적으로 실행해주도록 하면 되는 것 아니냐 라고 처음엔 생각했었다. 

하지만 불행히도 그런 방법은 없었다..

 

또한 이 프로젝트의 목표는 모델의 배포 최적화와 사용자의 편의성에 중점을 두었었기에 제대로된 pipeline과 infra를 구성하기 위해선 로컬화가 필수 였기 때문이다. 

 

그리고 이렇게 로컬화를 시켜야만 Docker를 통해 배포도 하고 AWS cloud위에서 가지고 놀 수가 있다. 

다음 포스팅에서는 사실 내가 이 프로젝트에서 가장 많이 배우고 싶었고, 가장 중요하게 생각하는 '모델을 Docker로 배포하고 어떻게 AWS위에서 서비스를 운영'했는지, 모델을 학습 했는지에 대해 자세히 설명하겠다. 

 

'MLOps > MLOps projects' 카테고리의 다른 글

AI Voice Conversion Project(음성 합성 모델) #4: 모델 배포과정(Docker)  (1) 2024.03.28
AI Voice Conversion Project(음성 합성 모델) #2: 모델 생성  (0) 2024.03.19
AI Voice Conversion Project(음성 합성 모델)  (0) 2024.03.06
'MLOps/MLOps projects' 카테고리의 다른 글
  • AI Voice Conversion Project(음성 합성 모델) #4: 모델 배포과정(Docker)
  • AI Voice Conversion Project(음성 합성 모델) #2: 모델 생성
  • AI Voice Conversion Project(음성 합성 모델)
무엇을해야하는지
무엇을해야하는지
어차피 잘될거지만, 그래도 꾸준히 열심히 최선을 다해서
  • 무엇을해야하는지
    What2Do
    무엇을해야하는지
  • 전체
    오늘
    어제
    • 분류 전체보기 (92)
      • MLOps (5)
        • DeepLearning(연구-논문) (0)
        • MS Azure AI (1)
        • MLOps projects (4)
      • DevOps&Cloud (23)
      • AWS (21)
      • Algorithm(Python) (25)
      • Springboot (8)
      • IT 시사 (2)
      • 운영체제 (4)
      • 네트워크 (2)
      • JAVA (1)
      • 면접&코테 후기 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    dp #동적계획법 #백준 #파이썬
    leetcode #codesignal #코테 #그리디 #알고리즘
    cors #클라이언트 #서버 #서버사이드 렌더링
    rockstat
    SpringBoot
    EC2
    knapsack #가방 #백준 #dp #topdown
    카엔프
    tdd #테스트코드 #spring #springboot
    clpud
    testcode #spring #단위테스트 #통합테스트
    ec2 #instace
    스프링부트
    3차원
    프로세스
    AWS
    백준
    BFS
    aws #iam #group #role
    dp #dfs
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
무엇을해야하는지
AI Voice Conversion Project(음성 합성 모델) #3: 모델 로컬화
상단으로

티스토리툴바