인공지능

    [TFX 스터디] 1. ExampleGen 컴포넌트 추가하기

    사용할 데이터셋 준비하기 데이터셋은 AI Hub의 일상생활 및 구어체 한-영 번역 병렬 말뭉치 데이터를 사용했다. 꽤 많은 양의 데이터를 무료로 얻을 수 있다는 점은 매우 좋았지만, 한가지 문제점이 있었다. TFX가 기본적으로 지원하는 파일 타입에 JSON이 없다. 다행이도 JSON 파일을 읽고 tf.Example로 변환하는 ExampleGen을 편하게 만들 수 있다. # pipelines/pipeline.py import tfx.v1 as tfx from tfx.components.example_gen.component import FileBasedExampleGen from tfx.dsl.components.base import executor_spec from pipelines.custom_exec..

    [TFX 스터디] 0. TFX를 활용하는 프로젝트 시작

    현재 TFX 스터디에서 '살아 움직이는 머신러닝 파이프라인' 책을 마치고 새로 TFX 프로젝트를 시작해 직접 머신러닝 프로젝트를 만들면서 TFX를 배우기로 했다. 아무래로 책에 나온 코드가 현재 버전과 달라진 점이 있다보니 TFX를 직접 써보면서 배우는 쪽으로 결정했다. Machine Translator with TFX 그래서 이번에 필자가 결정한 개인 프로젝트는 기계 번역을 지속적으로 학습하고 개선하는 머신러닝 파이프라인 시스템을 만들어볼 것이다. 머신러닝 파이프라인 내에서 학습한 한국어-영어 번역 모델을 Tensorflow Serving으로 배포할 것이다. 사용자는 Gradio를 통해 모델에게 번역을 요청하고 받아볼 수 있으며, 번역 결과에 대해 피드백을 전달할 수 있도록 만들 것이다. 사용한 모델은..

    [살아 움직이는 머신러닝 파이프라인 설계] 11. 파이프라인 1부 & 12. 파이프라인 2부

    아파치 빔의 특징 아파치 빔은 TFX에 기본적으로 설치된 오케스트레이션이다. 본래 아파치 에어플로나 쿠버플로 파이프라인과 같은 다양한 분산 처리 오케스트레이션을 지원하기 위해 사용했지만 아파치 빔 단독으로 분산 처리를 할 수 있다. 아파치 빔 자체로도 머신러닝 파이프라인을 실행할 수 있지만, 매우 간단한 기능만 제공한다. 지표를 그래프로 시각화 하거나 예약 실행과 갈은 기능은 제공하지 않는다. 하지만 작성한 파이프라인 코드에 이상이 없는지 실행을 통해 확인해볼 수 있기 때문에 다른 오케스트레이션에서 실행하기 전 디버깅 용으로 사용하는 경우가 많다. 아파치 에어플로의 특징 아파치 에어플로는 머신러닝 파이프라인 뿐만 아니라 많은 양의 데이터를 분산 처리할 때 많이 쓰이는 도구다. 그렇기 때문에 회사의 경우 ..

    [살아 움직이는 머신러닝 파이프라인 설계] 10. 고급 TFX

    TFX는 머신러닝 파이프라인 구성을 강제하지 않는다. 프로젝트의 요구사항에 따라 얼마든지 원하는 머신러닝 파이프라인의 구성을 추가하고 변경할 수 있다. 모델 학습과 같은 작업을 병렬적으로 처리할 수 있으며, 머신러닝 파이프라인에서 사용자에게 중요한 내용을 공지할 수 있으며, 프로젝트에 필요한 TFX 컴포넌트도 만들 수 있다. 여러 모델을 동시에 학습하기 TFX는 한 머신러닝 파이프라인에서 여러 모델을 병렬적으로 학습하고 검증할 수 있다. 이런 경우는 보통 더 작은 모델이나 다른 종류의 모델을 학습시킬때 사용하는 방법이다. TFX에서 머신러닝 파이프라인은 단순 선형적으로 흘러가지 않는다. 오히려 DAG(Directed Acyclic Graph, 유향 비순환 그래프)로 구성할 수 있어 필요한 경우 병렬 작업..

    [살아 움직이는 머신러닝 파이프라인 설계] 9. 텐서플로 서비스를 사용한 고급 모델 배포

    텐서플로 서비스를 사용한 고급 모델 배포 텐서플로 서빙은 새로운 모델이 로컬에 저장되면 이를 인식해 최신 모델을 배포한다. 하지만 모델을 로컬로 전달하려면 데이터 과학팀과 데브옵스팀간의 협력이 필요하다. 특히 텐서플로 서빙을 도커와 같은 컨테이너 환경에서 운영하고 있다면 최신 모델을 포함한 새로운 배포 컨테이너 이미지를 만들거나 컨테이너가 운영중일 때 새로운 모델 파일을 마운트 해야 한다. 텐서플로 서빙은 로컬 뿐만 아니라 클라우드 버킷에 저장된 모델도 불러와 서빙할 수 있다. 만약 데이터 과학팀이 새로 학습하고 검증한 모델을 클라우드에 저장하면 텐서플로 서빙은 클라우드 버킷에서 새로 저장된 모델을 인식하고 배포 모델을 변경한다. 이러한 방식을 이용하면 데이터 과학팀과 데브옵스팀 간의 업무를 분리할 수 ..

    [살아 움직이는 머신러닝 파이프라인 설계] 8. 모델 분석 및 검증

    머신러닝 모델을 배포하는 세가지 방법 학습된 머신러닝 모델을 배포하는 방법은 보통 세가지가 있다. 가장 많이 사용하는 방법은 모델 서버를 따로 두어 사용자 요청과 함께 들어온 입력 샘플을 받아 모델 예측을 수행한다. 하지만 입력 샘플이나 사용자 요청에 개인 정보가 들어있어 서버로 보낼 수 없는 상황에서는 모델 서버 대신 클라이언트의 브라우저에서 모델 예측을 수행하는 방법을 사용한다. 이 방법은 웹 페이지와 함께 모델을 함께 보내 브라우저에서 직접 실행한다. 마지막으로 모델 서버와 클라이언트의 연결을 보장할 수 없는 경우에는 에지 장치를 두는 방법도 선택할 수 있다. 파이썬 API 서버로 배포시 단점 Flask나 Django와 같은 프레임워크로 서버를 만들어 모델을 배포할 수 있다. 하지만 이러한 방식에는..

    [살아 움직이는 머신러닝 파이프라인 설계] 7. 모델 분석 및 검증

    모델 검증이 필요한 이유 모델 성능은 모델을 학습할 때도 확인할 수 있다. 모델을 학습하는 동안 우리는 정확도나 손실함수 값을 통해 얼마나 잘 학습하고 있는지 확인한다. 하지만 이를 통해 모델의 세부적인 성능을 평가한다고 할 수 없다. 첫번째로 하나의 성능지표만으로는 모델이 복잡한 비즈니스 문제를 해결할 수 있다고 보장할 수 없습니다. 특히 데이터가 불균형할 경우 단일 지표가 배포시 모델의 성능을 추측하기가 어럽다. 예를 들어, 암을 진단하는 모델을 개발한다고 했을때, 모델이 암 환자를 정상으로 판단했을 때의 리스크는 매우 크다. 또한 보통 암 환자보다 정상인이 더 많기 때문에 클래스 분포도 균형적이지 않다. 만약 이 모델을 정확도로만 평가한다면 해당 모델이 암 환자를 잘 찾내는지, 아니면 모든 사람을 ..

    [살아 움직이는 머신러닝 파이프라인 설계] 6. 모델 학습

    TFX에서 학습할 모델 정의하기 TFX에서 텐서플로우로 직접 만든 모델이나 케라스 모델을 모델 파이프라인에서 학습시킬수 있다. 이때 케라스 모델의 입력 레이어는 name에 전처리된 특성의 이름이 들어가야 자동으로 해당하는 입력 레이어에 맞춰 들어간다. Trainer 컴포넌트에게 필요한 입력 머신러닝 파이프라인에서 모델 학습을 진행할 때 Trainer 컴포넌트를 추가한다. 이때 Trainer에 5개의 입력을 집어넣어 정의한다. 데이터 스키마 전처리된 데이터 전처리 그래프 학습 하이퍼 파라미터 학습 방식을 정의한 run_fn() 이 저장된 소스코드 파일 run_fn() run_fn()은 TFT의 preprocessing_fn()처럼 사용자가 직접 정의하는 함수다. run_fn()은 Trainer가 모델을 학..