재형이의 성장통 일지
  • 머신 러닝 시스템 아키텍쳐 설계
    2024년 04월 08일 06시 05분 13초에 업로드 된 글입니다.
    작성자: 재형이
    반응형
    • 머신 러닝 시스템을 설계할 때 가장 중요한 것이 무엇일까?
    • 언제나 그렇듯 비즈니스 목적이 가장 중요하다. 머신 러닝의 성공 요소는 돈이 되는 비즈니스 문제의 정의와 현업에 적용할 수 있는 협업 환경이다.
    • AI 모델?은 요즘 Auto ML이라는 기술이 있기 때문에 정확한 비즈니스 목적(돈이 되는)과 커뮤니케이션이 가능한 환경이 만드는 것이 더 중요하다 (다른 부서 데이터를 가져다 써야하기 때문)

    • 데이터를 넣으면 자동으로 Vector화 해주고 Model Zoo에서 적합한 모델을 찾아서 뉴런 구조를 수정한다. 하나의 모델만 사용하는 것이 아니라 여러 모델을 만들어서 앙상블하는 구조이다.

    • Auto ML은 데이터를 넣으면 적합한 모델을 자동으로 생성해주는 기술이다 (3~4시간이면 나옴)
    • 검정색이 사람이 만든 모델이고 빨간색이 Auto ML이 만든 모델의 정확성이다. Well-defined한 문제에서는 Auto ML의 정확도가 이미 사람을 앞섰다.
    • 실제 현업에서는 ML Code가 차지하는 비중이 매우 적다. 전체 시스템의 5% 미만이다.

    • DevOps가 필요한 업무들이 더욱 많이 차지한다

    • 3대 클라우드들을 보면 Pre-trained된 API들을 많이 제공해주고 있다

    ML pipeline

    • Data Ingestion과 Data Analysis(EDA)는 Data Mesh 아키텍쳐와 비슷하다

    https://jaehyeong.tistory.com/entry/%EB%B9%85%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%84%A4%EA%B3%84-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%A7%A4%EC%89%AC

     

    빅데이터 시스템 아키텍쳐 설계 (데이터 매쉬)

    데이터 분석을 해서 insight를 얻으려는 이유? → 돈을 벌기 위해서 Data Analytics Model - Funnel Chart Acquisition: 사람들을 끌어모으는 것, 최종적으로 install하게 하는 것이 목표 ex) Temu에서 룰렛 돌려서 무

    jaehyeong.tistory.com

    • Data Processing

    • Feature selection은 데이터의 여러 컬럼 중에서 내가 사용할 컬럼만 뽑아내는 것이다
    • Sampling은 데이터가 한쪽에 치우치지 않게 균등화시키는 것을 말한다. 예를 들어 10대, 20대 데이터을 가지고 있을 때 10대는 1000명이고 20대는 100명일 경우 그대로 사용하면 모델이 편향이 생겨버린다.
    • 머신 러닝은 모든 데이터를 행렬로 표현된 값으로 이해하기 때문에 데이터를 행렬로 변환시키는 것을 Feature Engineering이라고 부른다

    • 데이터 feature engineering에는 코드 레벨에서 하는 방법과 오픈소스를 사용하는 방법이 있다
    • Tensorflow에서 제공하는 라이브러리를 사용하여 코드 레벨에서 하는 방법이 있다

    • 데이터의 양이 적을 때는 코드 레벨에서 가능하겠지만 데이터의 양이 많아진다면 오픈소스를 사용한다
    • 오픈소스도 빅데이터용 오픈소스(spark,hadoop)를 활용하는 방법과 ML pipline Framework용(TFX)으로 나온 것이 있다
    • 빅데이터용 오픈소스를 사용하는건 원래 ML용으로 설계된 것이 아니기 때문에 기능이 부족할 수 있다. 그래서 추가 개발이 필요할 수 있음
    • TFX는 텐서플로우 + 데이터 전처리 기능 이다

    Training

    TPUs are fast, inexpensive, and designed to scale

    Model Evaluation

    • 이전 모델과 비교

    • AI의 원칙 중 하나가 왜 이런 결과가 나왔는지를 설명할 수 있어야 한다는 것이 있다
    • 예를 들어 쿠팡에서 어떤 상품이 잘 팔릴지 예측하는 모델을 만들었다고 할 때, A 상품이 잘 팔릴 것이라고 예측을 했다. 그리고 이걸 보고를 한다고 할 때, 상대는 듣고 A 상품이 왜 잘팔리는지 분명히 물어볼 것이다. 왜냐하면 그거에 맞게 마케팅 전략을 짜야하니까. 그래서 설명할 수 있어야 한다.
    • 여러가지 기법이 있는데 그 중에서 Feature Attribution 이라는 기법을 많이 사용한다. 결과가 도출되는데 어떤 컬럼이 가장 영향을 많이 주었는지를 보여준다.

    Deployment

    • 아무리 accuracy가 잘 나온다고 하더라도 실서비스에 올라가기 위해서는 responsible과 경제성이 뒷받침이 되어야 한다
    • 예를 들어 모델을 정말 잘 만들었고 성능이 1QPS(1초에 하나 serving)이고 장비는 A100 gpu를 사용한다고 가정해보자

    가격 ㅎㄷㄷ

    • 만약에 동시에 100명에게 서비스를 제공하려면? 35,700,000 X 100 = 3,570,000,000 gpu 값만 36억이 들어간다. 경제성이 떨어진다
    • 그래서 모델을 축소시키는 기법을 사용하기도 한다
    • 모델의 정확도가 90% 정도인데 경제성이 떨어지면 모델을 축소시켜서 정확도를 한 70% 정도로 낮춘 후에 사용하다가 결과가 애매할 때는 서버에서 90%짜리 모델을 사용하게 구현
    • 아니면 모델을 더 작게 만들어서 서버에서 돌리는게 아니라 단말기에서 돌아가게 만듬. Edge ML이라고 부름

    MLOps

    • 지금까지 기본적인 ML 파이프라인이었다
    • 하지만 여기에 더 추가적인 프로세스를 추가할 수 있다

    • Data ingestion 단계에서 필요한 것은 원하는 때에 필요로 하는 사람이 필요한 데이터를 가져올 수 있게 해주어야 한다 → Data Catalog
      데이터들을 다 등록해두고 Search해서 찾을 수 있게 해줌. 그리고 Access Control 기능이 지원되야 한다. (PII 정보 같은건 training하는데 별로 필요 없는 정보이니까 막아야 함)
    • 필요한 데이터를 찾아서 전처리하고 featuring을 끝낸 후에 나온 정제된 데이터를 나중에 또 사용해서 비슷한 모델을 만드려고 하거나 필요할 때, featured된 데이터를 저장할 공간이 필요하다 → Feature Store
      Data Catalog는 원본 데이터이고 Feature Store에 있는 데이터는 정제된 데이터이다. 추가로 데이터를 고속으로 ingestion하는 기능이 필요하다. 머신러닝에서는 학습 속도가 매우 중요하다. 학습 속도를 줄이기 위한 방법 중 가장 간단한 것은 GPU 성능을 높이는 것이다. 하지만 비용이... 그래서 Feature Store를 사용해서 데이터 I/O 시간을 줄여서 학습 속도를 줄이는 방법도 있다

    =========모델 학습 시간 줄이는 방법==========

    더보기
    • 일단 학습을 시작하면 디스크에서 데이터를 읽는다. I/O
    • 학습을 진행하면서도 CPU를 사용해서 Shuffling 같은 데이터 전처리를 한다.
    • 그 후에 GPU로 트레이닝을 한다.
    • 보통 학습 시간을 줄이기 위해서 GPU 성능을 높여서 GPU 부분만 줄이려고 한다.
    • 하지만 비용적인 문제가 있다
    • 하지만 실제로 I/O 단계에서 시간이 엄청 걸린다. 왜냐하면 보통 S3와 같은 버킷을 사용하기 때문이다. 그래서 이 부분을 줄이기 위해 parallel storage라던지 local disk에 caching을 하는 여러가지 기법을 사용할 수 있다. 이렇게 I/O 단계를 줄이게 해주는 기능이 포함되어 있어야 하는게 Feature Storage이다.
    • 근데 여기서 더 나아가서 학습 속도를 줄이는 방법이 있다
    • 이런걸 parallel processing이라고 부른다

    =====================================

    CT (Continuous Training)

    • 데이터를 수집해서 모델을 만들었다. 이게 끝일까? 아니다 데이터는 계속 변화한다. 그렇기 때문에 기존에 만들어 두었던 모델이 제대로 된 기능을 못할 수 있다. 이렇게 데이터가 변화하는 것을 Data Drift라고 부른다.
    • 예를 들어 카드사에서 고객들의 소비 습관을 패턴화하는 모델을 만든다고 할 때 1월과 6월의 소비습관이 같을까? 1월에는 설날이 있으니까 비용 지출이 많을 것이다. 그럼 12월은? 다 다르다.
    • 그래서 이러한 데이터의 변화를 지속적으로 반영하면서 Train시키는 구조가 필요하다. 이것을 CT (Continuous Training) 이라고 부른다.
    • 그리고 모델이 커지면 커질수록 다른 기능들과 dependency가 생긴다. 예를 들어 부정거래 검출하는 모델을 만들었을 때, 부정거래 검출과 가입 심사 서비스가 연동될 수 있고, 거기에 한도액 조정하는 기능도 연동될 수 있고 등등 dependency가 생긴다. 만약에 Data Drift가 생겨서 부정거래 검출 모델이 제 역할을 못하면? dependency가 있는 서비스들이 다 무너지게 된다. 그래서 CT와 함께 이런 부분을 잘 잡아줄 수 있는 방법을 연구해야 한다

    참고) 데이터 라벨링

    • 그냥 전문 업체를 사용하자. 너무 노가다임
    • 클라우드웍스

    https://www.crowdworks.ai/ko/

     

    AI에 필요한 모든 데이터 솔루션ㅣ크라우드웍스

    크라우드웍스는 데이터 중심의 인공지능 기술을 통해 사람과 인공지능이 함께 성장하는 새로운 미래를 만들어갑니다.

    www.crowdworks.ai

    • 아니면 머신러닝 모델을 이용해서 라벨링하는 방법도 있다. 예를 들어 ChatGPT 같은 걸 이용해서 text를 classfication 해서 라벨링하는 방법이 있다. 배달앱을 운영 중인데 댓글을 카테고리화하고 모델을 만들고 싶은 경우에 Chat GPT 4.0으로 라벨링만 시키고 모델에 학습시키는 식으로 활용 가능하다.
    • 기존에 존재하는 모델을 활용해서 데이터를 필터링하는 전략도 좋은 전략이다
    • 사람이 하는 것이 가장 좋지만 가장 비싸기 때문에 일단은 머신러닝 모델을 활용해서 1차 필터링한 후에 나머지를 사람을 고용해서 채우는 것이 좋은 approach 전략이 될 수 있다
    반응형
    댓글