인공지능/Tensorflow Extended

    [TFX 스터디] 4. Transform cont.

    저번에 실패했던 preprocess_fn에 tokenizer 넣기에 성공했다. 막상해보니 간단한 일에 시간을 많이 소비했다는 생각이 들었다. 저번 스터디에서 발생했던 에러는 다음과 같다. TypeError: Expected Tensor, SparseTensor, RaggedTensor or Operation got {'input_ids': , 'attention_mask': } of type 처음에는 해당 에러가 어디서 발생했는지 알 수 없었다. 하지만 Huggingface의 Transformers를 써봤다면 익숙한 이름이 보일 것이다. {'input_ids': , 'attention_mask': } 이는 Tokenizer가 문장을 토큰화한 결과를 내보낼때의 형식이다. input_ids에는 토큰화와 정수..

    [TFX 스터디] 3. Transform

    이번에는 Transform Component를 건드려보았다. Transform에서는 ExampleGen에서 Example을 가져와 Hugging Face Transformers의 Tokenizer를 통해 토크나이징을 하고자 한다. 먼저 preprocessing_fn() 함수를 정의한 transform.py를 만든다. import tensorflow as tf import tfx.v1 as tfx from transformers import AutoTokenizer MODEL_NAME = "beomi/KoAlpaca-llama-1-7b" TEXT_FEATURES = { 'en': None, 'ko': None, } tokenizer = AutoTokenizer.from_pret..

    [TFX 스터디] 2. Interactive Notebook

    사실 ExampleGen을 만들때부터 Jupyter를 통해 TFX의 Interactive Notebook 기능을 사용하려 했다. Interactive Notebook이란 Notebook 환경에서 Component를 직접 실행하고 이에 대한 중간 결과를 볼 수 있는 기능을 말한다. Interactive Notebook을 사용하면 각 단계별로 데이터가 어떻게 처리되는지를 디버깅하면서 짤 수 있기 때문에 이번 프로젝트에서 사용하고자 했다. 그런데 저번 주차에 사용하지 않았는데, 그 이유가 Jupyter Notebook를 실행하는데 문제가 발생했다. 처음에는 Jupyter Notebook 서버가 열리지 않아 Jupyter를 재설치하고 서버를 켰다. 그런데 이번에는 노트북에서 ipykernel 버전이 맞지 않아 ..

    [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. 텐서플로 서비스를 사용한 고급 모델 배포

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