Serverless AI

AWS Personalize

가이드에 따라 진행

IAM 생성 권한이 없어서 Dataset 생성에서 더 이상 진행되지 않음.

MovieLens 예제는 rating 컬럼을 제거하는데, 그렇다면 Get Recommendations에서 무작위로 보여주는게 아닌가?
원래 MovieLens 데이터는 rating, user, item 정보 모두 포함되어 있음

나 라면 10% 정도를 A/B 테스트 용도로 할당하고 피드백을 받아 1/10 보다 CTR이 높은 경우 대체하는 방식으로 구현할 것 같은데 비율 확인 필요. 여기서도 SDK 또는 JS 라이브러리로 사용자 이벤트를 추적하는 것 같다.

AWS SageMaker

학습 부터 배포 까지 전체 데이터 플로우를 관리한다. IDE 까지 제공
모델 경량화 서빙을 위한 SageMaker Neo

GCP Recommendations AI

GCP의 경우도 거의 유사하다.

  1. Others you may like(Typically used on product detail pages)
  2. Frequently bought together(Commonly displayed after add-to-cart events)
  3. Recommended for you(Typically used on home page)

2021년 4월 기준 세 가지 모델 타입을 지원하며, CTR 또는 CVR로 성능을 평가한다. 모델 생성 이후에는 JavaScript pixel을 심어서 피드백을 받아 A/B 테스트를 진행한다.

GCP AI Platform

ml-engine에서 이름이 바꼈다. 공식 가이드 문서가 가장 정확. 예전 블로그는 outdated.

AI Hub는 다양한 pre training 모델을 제공한다. Data Labeling은 레이블링 툴 제공. Explosion의 Prodigy와 유사할 것으로 보임. Notebook은 jupyter notebook을 제공한다. 아직 한국은 지원하지 않는다. Pipelines는 managed kubeflow를 제공한다. Jobs는 training을 지원하는데, built-in은 BERT를 택해서 학습할 수 있고, custom은 ML framework을 선택할 수 있다. (scikit-learn, TensorFlow, XGBoost 중 택 일) Models는 prediction 서비스로 사실상 가장 유용한 서비스다. 그런데, 마찬가지로 아직 한국은 지원하지 않아서 모델을 한국 이외 리전에 업로드해야 한다. input-type이 json인데, 특이한 형태로 받고 있어서 gcloud ai-platform predict --help 도움말로 확인 필요. new line으로 입력값을 구분한다. 바로 모델을 업로드 하니 잘 안되는데, local predict 기능이 있어서 여기서 먼저 잘 되는지 확인할 수 있다. 매우 편리. 실제로 로컬 모듈을 활용하기 때문에, tf도 설치되어 있어야 한다.

xgboost를 sckit-learn interface로 했다. 이 경우 framework이 XGBOOST인지 SCIKIT_LEARN인지도 애매하다. (xgboost가 직접 구동되어야 하니 당연히 XGBOOST이다.) xgboost DMatrix로 모두 변환. 기존에 XGBClassifier()가 자동으로 wrapping해서 처리해주는 것들이 많았는데, 전부 직접 해야 해서 매우 번거롭다. 그러나, 덕분에 early stopping 처리도 하고, LabelEncoder()도 직접 구현할 수 있었다. 이제 ai-platform에서 잘 동작한다. 다만, python/java만 제공해서 웹 프론트를 python으로 변경해야 한다. 다시 해보니 기존 scikit-learn wrapper도 잘 동작한다. 결과를 보면 multi:softprob로 되어 있다. 그래서 n개 중에 확률 높은 하나를 직접 처리해주는 작업이 필요함. 기존에 wrapper가 이 작업을 해줬다.

Local Predict

$ gcloud ai-platform local predict --model-dir=. \
--json-instances=./input.json --framework=XGBOOST
# input.json
[46042,276,32.5,28.5,22.5,22.5,10,1,1,1]
[3.8306e+04, 9.1500e+02, 2.8000e+01, 3.0500e+01, 6.5000e+01,1.4000e+01, 0.0000e+00, 1.0000e+00, 1.0000e+00, 0.0000e+00]

AI-Platform에서는 입력값을 다음과 같이 한다.

{"instances":[[46042,276,32.5,28.5,22.5,22.5,10,1,1,1]]}

GCP GCE

GCE 설치에 관한 내용이지만, ML과 관련이 있어서 여기에 정리

Conda

conda가 설치된 상태에서 추가 설치 및 업그레이드가 필요하다. 특히 RAPIDS는 conda로만 설치된다. C++14 및 CUDA 제약 사항으로 인해1 그런데, $ conda update --all --verbose 조차 제대로 실행 안됨. 채널에서 정보를 가져오는데 상당한 제약 사항이 있다. 다음과 같이 수정 필요.

$ conda config --show-sources
==> /home/gcp-user/.condarc <==
channel_priority: flexible
channels:
  - conda-forge
  - defaults

채널 설정을 flexbile로 두는게 핵심이다. 이 사소한 설정으로 인해 Solving environment:가 hang up되어 이후 과정이 진행 안됨. 대부분의 문서에서,

$ conda config --set channel_priority strict

를 가이드 하지만 실제로는,

$ conda config --set channel_priority flexible

에서 동작했다. 추가 확인이 필요하다.

느리고, 설정에 sensitive한 설치로 conda 설치에 대한 신뢰가 많이 떨어져 있다. 다행히 Deep Learning VM으로 이미 RAPIDS가 설치된 이미지로 부팅할 수 있다.

conda 버전을 낮추면 된다는 얘기가 있어 따라해봤으나 여전히 안된다. 특히 4.6.x에서는 아예 killed 되어 버렸다. 여전히 RAPIDS conda 설치는 실패.

$ conda install conda=4.6.14
$ wget https://repo.anaconda.com/pkgs/misc/conda-execs/conda-4.7.5-linux-64.exe
$ ./conda-4.7.5-linux-64.exe install -p /opt/conda conda=4.7.5
$ conda install -c rapidsai -c nvidia -c conda-forge -c defaults rapids=0.14 python=3.7 cudatoolkit=10.1

Notebook

노트북을 설치한 인스턴스를 생성해준다. 아직 Seoul은 없음. 인스턴스를 생성하고 JupyterLab을 직접 설치하는 것과 뭐가 다르냐고 할 수 있지만 구글 인증을 포함한 많은 부분이 이미 처리되어 있어 매우 편리하다.

  • Python 2 and 3 지정
  • 비용 최소를 위해 1 CPU 별도 지정
  • asia-northeast1-b (Tokyo)

%%bigquery 매직 키워드 바로 사용 가능. 처음에 storage warning이 발생해서 콘솔에서 $ pip install google-cloud-bigquery-storage 커널 재시작만 한 번 해줌.

%%bigquery df
select temp, count(temp) from aas
group by temp
order by temp asc

노트북은 public 접속 가능하나 구글 인증으로 확인이 되어야 접속 가능하다.

Last Modified: 2021/06/08 13:03:45

is a collection of Papers I have written.
© 2000 - Sang-Kil Park Except where otherwise noted, content on this site is licensed under a CC BY 4.0.
This site design was brought from Distill.