클라우드로부터의 탈출! 윈도우 10용 머신러닝 앱 구현된다

InfoWorld
윈도우 10의 신버전 공개가 머지 않았다. 그와 함께 애플리케이션용 새 API도 많이 선보일 것이다. 큰 변화 중 하나는 다른 곳에서 훈련된 머신러닝 모델이 애플리케이션 형태로 실행되도록 지원하는 것이다. 또 이 과정에서 머신러닝 애플리케이션 가속화를 위해 로컬 GPU를 활용할 수도 있다.

머신러닝 애플리케이션을 구축하는 것은 복잡한 과정이다. 또 모델 훈련에 많은 데이터와 상당한 처리 성능이 필요하다. 클라우드 플랫폼과 넓은 대역폭을 이용할 수 있는 상황이라면 상관 없겠지만 만일 기트허브(GitHub)의 기존 모델을 취해 PC에서 실행하고 싶다면 어떨까?

‘훈련된 머신러닝 모델’은 신경 네트워크와 딥러닝의 장점을 애플리케이션에 활용하기에 이상적인 도구다. 적절한 인터페이스에 연결하기만 하면 코드의 일부로 실행되기 때문이다. 그러나 시중의 여러 머신러닝 프레임워크와 플랫폼을 감안하면 어떤 모델도 사용할 수 있는 공통 런타임이 필요하다. 이 때 새로운 윈도우 머신러닝 도구가 요긴하다. 윈도우 개발자들이 기존 머신러닝 모델을 자신의 애플리케이션에서 실행할 수 있게 해주는 플랫폼을 제공할 수 있기 때문이다

윈도우용 ONNX 소개
마이크로소프트는 ONNX(Open Neural Network Exchange) 형식을 지원한다. 플랫폼과 서비스 간에 딥러닝 모델을 공유하기 위한 공개 표준이다. ONNX가 있으면 클라우드 플랫폼이나 전용 머신러닝 시스템 상에서 유명 알고리즘을 이용해 신경망을 구축해 훈련시킬 수 있다. 일단 훈련이 되면 알고리즘을 다른 프레임워크에서, 아니면 윈도우 머신러닝을 PC 또는 심지어 IoT 기기 상의 애플리케이션의 일부로 실행시킬 수 있다.

ONNX는 현재 다양한 머신러닝 프레임워크를 지원한다. 예를 들면, 페이스북의 인기 있는 카페 2(Caffe 2), 파이썬(Python) 기반의 파이토치(PyTorch), 마이크로소프트의 코그니티브 툴킷(Cognitive Toolkit)(예전 이름은 CNTK) 등이다. 구글의 텐서플로우(TensorFlow)에 대한 직접적인 지원은 없지만 ONNX로서 내보내기를 하게 해 주는 비공식 커넥터를 구할 수 있다. 공식 가져오기/내보내기 도구는 현재 개발되는 중이다.

또 ONNX는 자체 런타임과 라이브러리를 제공한다. 따라서 사용자는 자신의 모델을 자신의 하드웨어에서 실행하면서 이미 보유 중인 가속기를 활용할 수 있다.

ONNX로 머신러닝 모델 변환
머신러닝 모델 구축 및 실행을 위해 애저 상에서 마이크로소프트 코그니티브 툴킷을 사용 중이라면 이미 ONNX에 접근할 수 있다. 2.3.1 이후 버전에는 모두 포함되어 있기 때문이다. AI용 비주얼 스튜디오(Visual Studio) 도구에도 곧 포함될 예정이다. 모델을 내보내기 위해서는 ONNX를 내보내기 형식으로 선택하기만 하면 된다. 파이썬이나 C# 코드 한 줄로 할 수 있는 일이다. 훈련 애플리케이션에 내보내기 명령문을 써 넣을 필요조차 없다. 애저 노트북(Azure Notebook)으로부터의 호출이나 애저 머신러닝 파이프라인의 명령문으로도 가능하기 때문이다.

마이크로소프트는 애플의 코어ML(Core ML)과 같은 다른 형식에서 ONNX로 모델을 변환할 수 있는 자체 도구도 제공한다. 마이크로소프트의 윈ML툴스(WinMLTools)는 파이썬 패키지이기 때문에 아나콘다(Anaconda)와 같은 기존 머신러닝 도구와 함께 사용할 수 있다. 익숙한 머신러닝 개발 환경에 통합함으로써 교차 플랫폼 데이터 과학기술과 윈도우 개발자를 결합시킬 수 있다. 이제 윈도우뿐 아니라 널리 사용되는 모바일 플랫폼에서 실행되는 똑같은 머신러닝 모델을 사용하는 것이다.

단 그리 간단한 일은 아니다. 이미지 출력을 제공하는 코어 ML 모델과의 작업에 문제가 있을 수 있다. ONNX는 이미지 종류를 직접 지원하지 않기 때문이다. 그러나 마이크로소프트의 윈ML툴스 설명서를 참고하면 ONNX 출력 텐서를 이미지 파일 모음에 매핑할 수 있다.

윈도우 애플리케이션에 머신러닝 추가
일단 내보내기가 된 모델은 윈도우의 새로운 머신러닝 플랫폼에서 실행 가능하다. 일단 가져오기가 된 훈련된 모델은 추가 훈련 없이도 새로운 데이터와 작업할 수 있다.

예를 들어 이미지 인식에 사용한다면 현장 작업자들은 자신의 노트북 또는 투인원(2-in-1)의 카메라를 이용해 문제를 파악하고 해결책을 찾을 수 있는 새로운 도구를 제공받는 셈이다. 연결성 문제가 있는 경우에는 센서나 다른 모니터링 도구에서 다운로드 받은 데이터에 대해 로컬 머신러닝 알고리즘을 실행 시킬 수 있다. 차량 부착 센서로부터 자동차 수리가 가능한 진단 도구 역할을 할 수도 있을 것이다.

다이렉트X(DirectX) 12에서 연산 GPU지원을 기반으로 한 윈도우 머신러닝은 대부분의 최신 PC하드웨어에서 실행 가능할 것이다. GPU가 없으면 CPU자원을 이용할 수 있다. 단, GPU를 병렬 처리 표면으로 사용함으로써 얻게 되는 성능의 이점은 많은 부분 잃게 된다. 퀄컴(Qualcomm) ARM 기기의 AI 코어로 작업하는 방법과 인텔의 플러그-인AI 코프로세서(co-processor)로 작업하는 방법도 있다.

현재 윈도우 머신러닝 지원이 가능한 곳은 비주얼 스튜디오 15.7 사전 공개판과 윈도우 10 SDK 윈도우 참가자 공개판이다. 머신러닝 처리를 위한 UWP 코드 작성은 간단하다. ONNX 모델을 비주얼 스튜디오 프로젝트로 내보내면 적절한 인터페이스와 클래스가 자동으로 생성되고 이를 해당 애플리케이션에 통합시키면 된다. C++이나 C#를 사용하는 경우에는, 윈도우 SDK의 도구인 mlgen이 래퍼 클래스(wrapper class)를 생성해 준다.

엣지에서의 머신러닝
윈도우 머신러닝은 전통적인 PC에서만 사용되는 것이 아니다. 마이크로소프트 CEO 사티아 나델라가 ‘인텔리전트 엣지’(intelligent edge)라고 부르는 곳으로 클라우드 애플리케이션을 이동시킬 수 있다는 사실은 다양한 종류의 기기로의 이동을 의미한다. 셀 타워(cell tower)에서 실행되는 일반 크기의 서버일 수도 있고 지점 서버나 데스크탑 PC와 비슷한 사양의 허브 기기일 수도 있으며 내장 프로세서를 사용하는 IoT 기기 자체일 수도 있다.

AMD는 최근 에픽(Epyc)과 라이젠(Ryzen) 프로세서의 내장 버전을 출시했다. 데스크톱 및 모바일 라이젠과 마찬가지로 내장 버전은 내장된 GPU상에 코드를 실행한다. 영국 출시 행사에서 한 개발자는 임베디드 라이젠을 활용한 카메라로 맥주병들을 스캔해 작업 결정을 내리는 시연을 진행했다. 여기에 사용된 머신러닝 모델은 보다 강력한 시스템에서 상당량의 이미지 데이터를 이용해 훈련된 것이었다. 훈련을 마친 후 내보내서 카메라로부터의 이미지 흐름을 분석하는 데 사용된 것이다.

애플리케이션 자체는 내장 리눅스(Linux) 상에서 실행 중이었지만 향후에 윈도우의 내장판이 나오는 것도 어렵지 않아 보인다. 이를테면 윈도우 10 IoT 엔터프라이즈(Windows 10 IoT Enterprise) 같은 것이 내장 라이젠 하드웨어에 비슷한 머신러닝 기능을 제공하는 식이다. ARM의 프로젝트 트릴리움(Project Trillium) 내장 머신러닝 프로세서에 대한 지원 옵션도 있다. 저성능 칩셋에 ARM의 자체 신경 네트워킹 소프트웨어를 실행할 수 있는 하드웨어를 내장시키는 것이다.

머신러닝을 클라우드 밖으로 가지고 나오는 것은 중요하고도 의미 있는 진전이다. 신속하게 반응해야 하는 애플리케이션의 지연을 없애주고 멀리 떨어진 사이트에서 클라우드 서버로 전송되는 데이터 양을 줄여주기 때문이다. 윈도우 머신러닝이 있으면 이들 기술을 사용해 복잡한 알고리즘을 본인 코드에 신속하게 추가함으로써 소프트웨어를 더욱 유능하고 유용하게 만들 수 있다. ciokr@idg.co.kr