
데이터
Tensorflow
머신러닝을 위한 파이썬 기반 엔드 투 엔드 오픈소스 플랫폼이며, 머신러닝 생태계에서 독보적인 영향력을 행사한다.
StackOverflow 질문 수: 83007
Github Stars : ★ 188904
사용 기업

슈퍼브에이아이

딜리셔스

뤼이드

트렌비

디셈버앤컴퍼니

당근

마이리얼트립

버킷플레이스

와디즈

버즈빌

마켓컬리

쏘카

리디

왓챠

마이셀럽스

버드뷰

오피지지

위메프
더 보기
현대자동차그룹
딥러닝 모델을 파이썬으로 구현하고 검증하기 - #0 CNN with Tensorflow
안녕하세요 이상호 책임입니다.지난 포스팅까지는 머신러닝 구현을 주제로 얘기를 해봤습니다. 이번에는 딥러닝을 주제로 두고, 포스팅을 이어가도록 하겠습니다.* 머신러닝 구현 관련 포스팅1. 파이썬을 활용한 AI/ML모델로 예측 결과 도출하기 - Baseline #02. 파이썬을 활용한 AI/ML모델로 예측 결과 도출하기 - Preprocessing #13.파이썬을 활용한 AI/ML모델로 예측 결과 도출하기 - Ensemble & AutoML #2CNN(Convolutional Neural Network)첫번째로 이미지 데이터를 학습하고, 예측 및 분류하는 대표적인 알고리즘, CNN(Convolutional Neural Network)에 대해 다뤄보고자 합니다.통상적으로 딥러닝을 공부할 때 CNN을 활용한 이미지 분류(Image Classification)을 제일 먼저 합니다. 아무래도 직관적인 이미지를 기반으로 학습하는 것이 이해에 많은 도움이 되기 때문입니다.CNN에 대한 상세 설명은 검색하면 아주 상세하게 잘 나와있기 때문에 생략하고, 코드 구현을 위주로 얘기해보겠습니다. CNN에 대한 개념을 숙지한 후 이어 봐주시면 좋을 것 같아 괜찮다고 생각되는 외부 포스트를 하나 공유합니다. [딥러닝 모델] CNN (Convolutional Neural Network) 설명 (tistory.com)현대차그룹 임직원분들께서는 HDAT LV3~4 시험에는 딥러닝 문제가 주로 나온다는 점을 참고해주시면 좋을 것 같습니다.CNN을 활용해서 이미지 분류 모델을 구현하는 것은 통상적으로 다음과 같은 순서를 따릅니다.1. 이미지를 불러올 수 있는 경로를 기반으로 list 생성 - python glob library 활용2. 이미지에 대응되는 labeling (bird -> 0 , human -> 1 이런식으로)3. 이미지 데이터를 RGB형태의 3차원의 feature map(numpy array)으로 변환 - PIL , open cv library 활용4. 이미지를 일괄적으로 변환할 경우 out of memory 발생할 수 있으므로 특정 갯수(batch)만큼만 반복적으로 추출하여 변환5. 학습을 위해 train data / validation data set 기반으로 데이터의 인스턴스 생성6. CNN 신경망 architecture 설계 및 모델링7. 모델 학습(장시간 소요되므로 GPU Computing필요)8. Inference (추론) - test 데이터셋을 활용합니다.1. 이미지를 불러올 수 있는 경로를 기반으로 list 생성 - python glob library 활용glob를 활용하여 image path array 만들기 (이미지의 경로를 읽어와서 image path array 만들기)import pandas as pd import numpy as np from glob import glob # glob 임포트하고 PATH_TRAIN = "CIFAR-10-images-master/CIFAR-10-images-master/train"PATH_TEST = "CIFAR-10-images-master/CIFAR-10-images-master/test"# 위 경로는 개발환경에 따라 바뀔 수 있습니다.train = pd.DataFrame([])# 빈 data frame 하나 먼저 만들고 train["image_files"] = glob(PATH_TRAIN + "/*/*")# "/*" 만 하면 PATH_TRAIN 하위 전부 # "/*/*"만 하면 그 하위 폴더내의 전부를 가져오는 뜻입니다.# "/*/*.csv" 원하는 확장자만 전부 가져올때 .png , .jpg , .csv로 가져올 수 있습니다.2. 이미지에 대응되는 labeling (bird -> 0 , human -> 1 이런식으로)각 image path별로 대응되는 image label 만들기이미지 경로별로 대응되는 라벨링을 만드는 단계는 쉬운것 같으면서도 어렵게 생각하면 괜히 꼬이는 부분들이 있습니다.따라서 심플하게 접근하는것이 중요합니다.우선 대응되는 라벨링을 가져오고 해당 라벨에 대한 인덱싱을 추가로 해줍니다. 그러기 위해서는 series.str.split(" ")개념을 이해해야 합니다.판다스 seriese를 string으로 변환하고 " "사이 문자열로 해당 전체 문자를 쪼갭니다. 쪼갠 결과를 먼저 보고 몇번째를 선정할지 고르는데, 예를들어 첫번째라고 한다면, series.str.split("/").str[0] 으로 지정해줍니다. 이때 이 값은 다시 series가 되므로 series.str.split("/").str[0].str.split("\\")로 한번 더 쪼개어 series.str.split("/").str[0].str.split("\\").str[n] , n번째 를 쓰시면 경로에서 labeling만 가져올 수 있습니다. (윈도우 개발환경 기반)# 윈도우 개발환경 # train["image_labels"] 컬럼 추가합니다.train["image_labels"] = train["image_files"].str.split("/").str[i].str.split('\\').str[j]# i , j는 하나씩 돌려보면서 판단합니다.# 리눅스 개발환경 기반 - 클라우드(코랩 , 캐글)train["image_labels"] = train["image_files"].str.split("/").str[i]# i는 하나씩 돌려보면서 0부터~ 판단합니다.### 개발환경은 돈표시 \\가 train["image_labels"] = train["image_files"].str.split("/")### 에서 나타나면 윈도우입니다.### 라벨링이 똑바로 들어가있으면 pd.factorize(train["image_labels"])[0]을 통해서 라벨인코딩합니다.train["image_labels"] = pd.factorize(train["image_labels"])3. 이미지 데이터를 RGB형태의 3차원의 feature map(numpy array)으로 변환 - PIL , open cv library 활용train/validation data set 나누기(tr
keras
python
tensorflow
SK텔레콤
M2 맥북의 GPU를 활용한 Jupyter Notebook 띄우기
M2 맥북을 새로 지급받았다. 때 맞추어 SK AI경진대회를 하고 있고 올해도 신청해서 참가상을 노린다.기왕이면 머신러닝에 특화되어 잘 만들었다는 애플실리콘의 그것도 최신모델인 M2 Pro Max의 성능을 활용해서 작업하고자 한다.하지만 기본적으로 python 및 jupyter notebook을 사용하면 cpu를 기반으로 돌아가므로 gpu를 활용할 수 있는 환경구축부터 해야한다. 이 과정을 이 글에 정리한다.참고로 본 글은 현시점에서 검색해서 나온 최신문서 - https://toward-the-future.tistory.com/entry/MacOS - 를 기반으로 필요한 부분만 발췌하여 잘못된 부분을 수정하는 것에 집중해 작성한다.(모든 내역은 Ventura의 기본콘솔의 zsh을 통해 수행했다.)전체 과정에 대한 그림일단 무턱대가 들이댈수 없으니 전체과정을 훑어보면일단 python 자체 설치부터 애플실리콘이 오면서 엉망인 상황인 듯하다. (오픈소스, 공짜의 한계) conda를 설치하고 이 conda를 통해 python 가상환경을 만들고 그곳에 필요한 라이브러리등을 설치하고 이를 기반으로 jupyter notebook을 띄운다.사전준비xcode 개발자 도구를 설치한다.xcode-select --installConda 설치3가지 방식(anaconda, miniconda, miniforge)를 제시하고 있는데 앞의 두개는 애플 용에 M1이라고 찍혀있어 뭔가 찜찜하여 마지막 miniforge 방식으로 직행한다. https://github.com/conda-forge/miniforge가 아지트인데 다음 명령으로 설치하라고 한다. curl -L -O "https://github.com/conda-forge/miniforge/releases/latest/download/Mambaforge- $( uname ) - $( uname -m ) .sh" bash Mambaforge- $( uname ) - $( uname -m ) .sh 두단계로 진행된다. (1)다운받고 그 다음에 (2)설치 인터렉트브 하게 뭔가 경고하고 알려주고 읽으라 하는데 필요시에만 yes 혹은 앤터를 눌러 넘어간다. 끝나고 나면 궂이 변경하지 않았다면 $HOME/mambaforge 에 다양한 파일들이 생긴 것을 확인할수 있다.내 환경의 경우 $HOME/.zshrc 파일은 변경되어 있는데 명령을 날린 환경에는 환경변수가 반영되지 않아서 source ~/.zshrc 해줘야 했다. 시스템이 재부팅 할때마다 conda 환경이 활성화 되는 것이 싫다면 다음과 같이 비활성화 하자. conda config --set auto_activate_base false가상환경 구축python 가상환경을 만든다. conda create -n tf29_py39 python = 3.9 conda activate tf29_py39 해당 환경에 tensorflow를 설치한다. (텐서플로우는 호환성이 매우 취약하므로 주의하자) conda install -c apple tensorflow-deps == 2.9 .0
python
tensorflow
하이퍼커넥트
머신러닝 모델 서빙 비용 1/4로 줄이기
들어가며하이퍼커넥트의 AI 조직에서는 다양한 머신러닝 모델을 서빙하고 있습니다. 보통의 서버와는 달리, 머신러닝 모델의 처리량(throughput)을 높이기 위해서는 특수 자원인 GPU가 필요합니다. 그런데 GPU를 사용하면 성능은 좋으나 비용이 만만치 않습니다.여기에는 몇 가지 이유가 있습니다.프로덕션은 실험보다 높은 가용성을 요구하기 때문에 AWS 같은 클라우드 서비스를 주로 이용합니다. 그런데 클라우드에서 GPU 노드는 CPU 노드에 비해 비용이 몇 배로 비쌉니다. 예를 들어 일반적인 서버에 사용되는 CPU 노드인 c5.12xlarge 인스턴스에서는 현재 10대 이상의 서버가 운영되고 있고 하나의 노드에 대한 월 비용이 $1,830 수준입니다. 하지만 모델 서빙 전용 GPU 노드인 g4dn.12xlarge 인스턴스에서는 많아야 4대의 서버가 운영되고 있는데 하나의 노드에 대한 월 비용이 $3,400 수준으로 더 많은 비용이 들어가고 있습니다. GPU는 CPU보다 자원을 낭비하기 쉽습니다. CPU는 경우에 따라 하나의 물리 코어도 더 작은 가상 코어로 나누어 사용할 수 있습니다. 하지만 GPU는 적어도 한 번에 하나의 카드를 점유해야만 합니다. 연산량이 적은 모델의 경우 필요한 연산 능력보다 메모리 통신 오버헤드가 더 클 수 있는데요, 이런 경우에 GPU를 사용하면 오히려 CPU에서 바로 처리하는 것보다 비효율적입니다.하이퍼커넥트 ML Platform 팀에서는 이런 제약 조건 아래에서 어떻게 하면 머신러닝 모델을 효율적으로 서빙할 수 있을지 고민을 거듭해왔습니다. 올해 5월부터 도입한 AWS Inferentia도 그 노력들 중 하나였는데요. 간단한 작업만으로 비용이 1/4 수준으로 크게 절감되었고, 현재는 적용 범위를 확장하여 많은 모델을 AWS Inferentia를 이용하여 안정적으로 서빙하고 있습니다.이번 포스트에서는 AWS Inferentia를 하이퍼커넥트의 인프라에 도입한 경험, 실제로 비용이 절감이 되는지 테스트 결과, 그리고 도입 과정에서 겪을 수 있는 문제와 해결 방안을 공유해보고자 합니다.AWS Inferentia가 무엇인가요?AWS Inferentia는 2018년 11월에 처음 발표되었고, 2019년 12월에 EC2 인스턴스(inf1)로 출시된 꽤 따끈따끈한 AI 가속기입니다. Inferentia를 이용하면 낮은 비용으로 더 빠른 머신 러닝 추론을 할 수 있어 저희의 요구 사항에 딱 맞았습니다. 우선 Inferentia가 무엇인지, 어떻게 속도와 비용이라는 두 마리 토끼를 잡을 수 있는지 잠깐 살펴보겠습니다.AI 가속기란?AI 가속기란 머신러닝 어플리케이션 가속에 특화된 프로세서입니다. 쉽게 말하면 CPU보다 Convolution이나 Attention과 같은 머신러닝 레이어 연산을 빠르게 수행할 수 있는 장치입니다.대표적인 AI 가속기로는 우리 모두가 알고 있는 GPU가 있습니다. 머신러닝 워크로드는 단순한 연산을 병렬로 수행하는 경우가 많기 때문에 CPU보다 병렬 계산에 유리한 GPU가 많이 활용되고 있습니다. 하지
nodejs
python
pytorch
tensorflow
드라마앤컴퍼니
AI 명함촬영인식 리오 적용기 2부 – ML Model Converter와 안드로이드 앱 적용기
안녕하세요. 빅데이터센터 AI Lab 강민석입니다.이번 AI 명함 촬영 인식 ‘리오(RIO)’ 적용기 2부에서는 리멤버 앱에 AI 명함 촬영 인식 ‘리오(RIO)’의 모델을 Client-Side Computing로 적용하기 위한 다양한 시행착오들을 공유하고자 합니다. 학습된 PyTorch Model을 ONNX와 Tensorflow 모델을 거쳐 TF Lite Model로의 변환과정과 모델 추론 안드로이드 샘플 환경에서의 테스트까지 내용을 소개 하고자 합니다. 이 글에서 AI 명함 촬영 인식 ‘리오(RIO)’ 적용을 위해 최종적으로 진행된 ML 모델의 변환 방법과 모델 추론을 위한 안드로이드 테스트 환경에 대해 설명 드리고자 합니다.이 AI 명함 촬영 인식 ‘리오’ 적용기 포스팅은 1부와 2부로 나누어 포스팅 되어 있습니다. 이번 AI 명함 촬영 인식 ‘리오’ 적용기 2부에서는 ML Model Converter와 안드로이드 앱 적용기에 대해 작성 되어있습니다.AI 명함 촬영 인식 ‘리오(RIO)’ 적용기 1부 – 명함 촬영 인식 위한 Instance Segmentation & Computer VisionAI 명함 촬영 인식 ‘리오(RIO)’ 적용기 2부 – ML Model Converter와 안드로이드 앱 적용기Client-Side Computing (또는 Edge Computing)Client-Side Computing은 데이터를 클라우드 서버로 보내는 대신 로컬 기기에서 처리하는 것입니다. 기계 학습과 관련하여 Client-Side Computing은 장치에서 추론이 직접 수행하는 것을 의미합니다. AI 명함 촬영 인식 ‘리오(RIO)’가 Client-Side Computing 사용 해야 하는 데에는 4가지 주된 이유가 있습니다.실시간 추론 : 리멤버 앱이 동작하는 모바일 장치의 ML 모델 추론 계산은 네트워크를 통해 API 결과를 기다리는 것보다 빠릅니다. 실시간으로 사용자에게 명함의 위치를 보여주고 명함의 영역을 잘라내 제공합니다. 오프라인 기능 : Client-Side Computing은 인터넷 연결 없이도 명함이 촬영되는 순간부터 명함의 위치와 명함의 영역 잘라서 명함의 이미지만을 제공하게 됩니다. 데이터 프라이버시 : 인터넷을 통해 전송되거나 클라우드 데이터베이스에 추가로 저장되는 위험을 낮춰 줍니다. 비용 절감 : ML 서버가 필요하지 않으므로 서버 비용이 절감됩니다. 이 외에도 명함 이미지가 서버로 전송되지 않기 때문에 데이터 전송 네트워크 비용이 절감됩니다.Client-Side Computing의 경우 큰 장점들이 있지만 다양한 제약 사항들이 생기게 됩니다. 모바일 기기의 처리능력의 제한, 모델 크기(용량)에 대한 제한, 모바일 적용을 위한 ML 프레임워크의 의존성에 대한 제약 사항들이 생기게 되고 이를 해결 하려는 다양한 리서치를 진행 하게 되었습니다. 이 과정에서 생긴 시행착오와 다양한 고민을 공유하여 관련 연구자 또는 개발자들의 시간을 절약하게 되었으면 좋겠습니다.ML Model Converter학습된 ML 모델을 모
pytorch
tensorflow
연관 기술 스택

Keras

Pytorch

Ray