오늘은 SAS에서 오랫동안 근무해온 프로그래머이자 데이터 사이언티스트의 SAS Viya 사용 후기를 공유해 드리려고 합니다. 새롭게 출시된 ‘SAS Viya(SAS 바이야)’ 환경을 사용해 본지는 이제 6개월이 지났는데, 벌써 푹 빠졌다고 합니다!
SAS9 환경에서 사용했던 많은 통계 기법을 SAS Viya 환경에 동일하게 적용했을 때 그 속도와 더 높은 정확성에 감격했답니다. 그렇다면 데이터 사이언티스트가 새로운 SAS Viya 플랫폼으로 전환했을 때 얻을 수 있는 이점은 무엇일까요? 간단히 설명하자면 ‘better, faster answers’, 즉 더 나은 답을 더 빨리 찾을 수 있습니다. 오늘은 SAS Viya 아키텍처 고유의 장점과 새롭게 제공되는 분석 프로시저의 장점을 구별해서 설명해드리고자 합니다.
SAS Viya 플랫폼의 장점
우선 SAS Viya 플랫폼의 장점을 살펴보겠습니다. SAS Viya는 데이터를 처리할 때 SAS9 워크스페이스 서버(Workspace Server) 대신 CAS(Cloud Analytic Services) 서버를 사용합니다. 그렇지만 여전히 SAS9도 활용할 수 있습니다. SAS/CONNECT를 통해 SAS9과 SAS Viya 환경을 오가며 쉽게 작업할 수 있으며, 이 기능은 2017년 말 자동화될 예정입니다.
1. 병렬 데이터 로드(Parallel Data Loads)
SAS Viya를 사용하자마자 느낀 장점은 대규모 데이터 세트가 SAS Viya 메모리에 로드되는 속도입니다. 하둡(Hadoop)을 이용해 입력 파일을 HDFS나 하이브(Hive)에 저장할 수 있는데요. CAS는 이 데이터를 병렬 처리하고 공유 메모리 영역으로 옮깁니다. SAS9도 동일한 데이터 변환을 지원하나, SAS Viya는 사용 가능한 모든 프로세서를 활용해 입력 데이터를 동시에 로드합니다. RAM의 경우, LASR 및 HPA 프로시저에서처럼 모든 데이터가 메모리에 정확히 들어맞을 필요가 없습니다. 따라서 SAS Viya를 이용하면 이전보다 훨씬 더 많은 데이터 세트를 처리할 수 있습니다.
2. 멀티 스레드(Multi-threaded) DATA step
맨 처음 SAS Viya에 데이터를 로드했을 때 SAS DATA step이 인 메모리에서 멀티 스레드로 빠르게 실행되는 개념이 정말 좋았습니다. SAS9 프로그램의 대부분은 그 상태 그대로 실행하지만 SAS Viya의 멀티 프로세싱은 실제 시스템이 DATA step 코드에서 명확한 BY 문(BY statements)이나 파티션 문(partition statements)을 발견할 때 시작합니다. 무엇보다 Proc Sort가 필요하지 않기 때문에 Procs step이나 DATA step에서 BY 문을 사용하기 전에 데이터를 정렬하지 않아도 됩니다. SAS Viya 환경에서는 ‘정렬’이 옛날 이야기라는 사실에 익숙해져야 할 것입니다. 지금까지는 데이터를 사용하기 전에 우선 데이터를 정렬하고 한 개 또는 그 이상의 DATA step을 실행해야 했는데요. 이제 이 모든 과정이 훨씬 단순한 코드 스트림으로 바뀝니다. SAS의 데이터 관리 솔루션 아키텍처 자문관 스티븐 소버(Steven Sober)의 최근 블로그를 통해 완전 분산 모드에서 실행되는 뛰어난 DATA step 코드 예제를 확인할 수 있습니다.
3. 오픈 API
SAS Viya의 모든 그래픽 사용자 인터페이스(GUI)는 일관성 있게 설계됐는데요. 특히 R&D 팀은 거의 모든 프론트엔드(front-end)나 REST 서비스가 명령어를 전송하고, CAS 또는 이와 상응하는 마이크로서비스 아키텍처로부터 결과를 받을 수 있도록 설계했습니다. SAS Viya 환경에서 새롭게 배워야 했던 것은 CAS 액션 세트의 개념이었습니다. CAS 액션 세트는 개별적으로 또는 동일한 세트에 속한 다른 액션과 함께 실행될 수 있는 여러 독립적인 액션으로 구성되는데요. CAS 액션의 장점은 생각할 수 있는 거의 모든 작업에 대한 액션이 하나씩 있다는 것입니다. SAS9 환경에서 여러 기능(functions)과 Procs을 합친 것과 같다고 볼 수 있겠네요. 사실 SAS가 구축한 모든 비주얼 인터페이스는 CAS 액션을 백그라운드에서 실행하고, 대다수 GUI는 코드 작성을 원하지 않는 사용자를 위해 코드를 자동으로 생성합니다.
무엇보다 CAS 액션의 진정한 매력은 각기 다른 코드 인터페이스를 통해 CAS 액션을 전송할 수 있다는 것입니다. 이때 SAS가 파이썬(Python), 자바(Java), 루아(Lua)와 같은 외부 언어(관련 Github 참고)를 지원하기 위해 개발한 오픈 API(애플리케이션 프로그래밍 인터페이스)를 사용하는데요. SAS Viya는 모든 유형의 외부 인터페이스에서 동일한 CAS 액션을 사용할 수 있도록 표준화된 기능을 제공합니다. 이 방식에 투자한 모든 사람들은 마치 거액의 배당금을 지급받는 느낌일 것 같네요.
4. 한 번 작성으로 모든 곳에서 재사용
기존 사용자나 신규 사용자 모두 좋아할만한 또 다른 장점은 바로 CAS 액션을 한 번 작성하고 모든 곳에서 재사용할 수 있다는 새로운 패러다임입니다. 예를 들어 코드를 먼저 Proc CAS에서 사용한 후 파이썬을 이용한 주피터(Jupyter) 노트북과 루아(Lua)에서도 사용할 수 있습니다. 자세히 살펴볼까요?
Proc CAS
파이썬 API
루아 API
3개의 코드가 거의 똑같죠? SAS Viya의 놀라운 장점 중 하나입니다. 이러한 코딩 방식 덕분에 SAS 코딩에 뛰어난 인재를 찾는 데에만 매달릴 필요가 없어졌습니다. 보통 여러 가지 오픈 소스 언어에 능숙한 젊은 코더들은 이러한 코드를 한번 접하고 이해한 후 기존 작업에 쉽게 적용할 수 있을 것입니다. 다시 말해 몇 가지 새로운 SAS Viya 객체를 배우기만 하면 본인에게 익숙한 코딩 환경을 유지하면서 업무를 크게 확대하고 개선할 수 있습니다.
분석 프로시저의 장점
1. 오토 튜닝(Auto-tuning)
다음으로 더욱 새로워진 분석 프로시저의 장점 몇 가지를 소개해드리겠습니다. 새롭게 추가된 SAS Viya의 뛰어난 기능 중 하나는 일부 머신러닝 모델링 기법, 특히 (익스트림*) 그래디언트 부스팅(gradient boosting), 의사 결정 트리(decision tree), 랜덤 포레스트(random forest), 서포트 벡터 머신(support vector machine), 인수분해 머신(factorization machine), 신경망에 대한 오토 튜닝 기능입니다. 즉 대부분의 반복적인 머신러닝 기법에서 요구되는 주요 옵션 설정을 자동으로 튜닝하는 것으로 오픈 소스 커뮤니티에서는 찾아보기 힘든 기능입니다. SAS는 데이터 사이언티스트 커뮤니티에서 ‘하이퍼스페이스 파라미터(hyperspace parameters)’라고 불리는 최적화 루틴들을 내장하고 있는데요. 이 루틴들은 다양한 설정을 시도해보고 사용자에게 최적화된 설정을 심지어 병렬로 선택해줍니다! 이 프로세스를 처음 실행할 때에는 시간이 조금 오래 걸리지만 보통의 모델 구축 시행 착오 과정을 거치지 않고도 정확성이 높아지기 때문에 사용해볼 가치가 있는 놀라운 기능이랍니다.
* ‘익스트림(extreme)’의 정의는 모든 부스팅 기법의 분산 및 멀티 스레드 측면과 관련됨
2. 익스트림 그래디언트 부스팅과 기타 인기 있는 머신러닝 기법들
사실 오픈 소스 커뮤니티에도 지난 2년간 익스트림 그래디언트 부스팅(xgboost) 기능이 있었습니다. 그렇지만 SAS Viya는 자체적인 익스트림 그래디언트 부스팅 CAS 액션인 ‘gbtreetrain’과 그에 따른 프로시저인 ‘Gradboost’를 포함합니다. 이 둘은 지난 2015년과 2016년 첸(Chen)이 개발했던 것과 매우 비슷하지만 전반적으로 몇 가지 기능들이 크게 개선됐습니다. 한 가지 큰 혜택은 앞서 설명한 자동 튜닝 기능입니다. 그 외 개선된 기능에는 1) CART에 국한되지 않은 보다 유연한 트리 분리 방법론인 ‘이진 트리 분리(binary tree-splitting)’ 2) 대다수 오픈 소스 툴에서 수행해야 하는 ‘원 핫 인코딩(one-hot-encoding)’과 다르게 명목 입력 변수가 자동으로 처리된다는 것이 있는데요. 또 파인 튜닝(fine tuning)과 제어를 위한 다양한 기타 세부 옵션 설정을 지원합니다.
SAS Viya는 모든 인기 있는 머신 러닝 기법을 포함합니다. 이를 통해 데이터 탐색, 사용자만의 모델 토너먼트 생성, 구축이 쉬운 스코어 코드 작성을 손쉽게 처리할 수 있습니다. 모델 관리의 경우, 적어도 올해 말 SAS Viya 다음 버전이 출시될 때까지는 SAS9을 통해 이뤄지는데요. 그렇지만 SAS Viya와 SAS9 사이에 견고하고 뛰어난 호환이 가능하기 때문에 전송 작업과 출력을 매우 매끄럽게 처리할 수 있습니다. 2017년 3월 기준으로 이용 가능한 SAS Viya의 전체 분석 기능은 SAS 웹사이트 에서 확인할 수 있습니다.
3. 인메모리 예측(In-memory forecasting)
자동 진단과 예측 생성에 관한 고유 특허 12개를 자랑하는 SAS9 포캐스트 서버(SAS9 Forecast Server)를 능가하기는 쉽지 않겠지만 현재 이 모든 업계 선두 혁신 기술을 SAS Viya의 분산 인메모리 환경에서도 이용할 수 있습니다. 특히 SAS Viya의 최적화된 데이터 셔플링(data shuffling) 루틴을 이용해 시계열 데이터(time series data)를 정렬하지 않아도 공유 메모리 어레이 상으로 빠르고 효율적으로 분산됩니다. 새로운 SAS Viya 아키텍처는 지금까지의 그 어떤 솔루션보다 데이터를 더욱 효율적으로 이용하고 더욱 빠르게 실행할 수 있는 새로운 객체 패키지를 제공하는데요. 예를 들어 3년 동안의 주간 시계열 데이터 150만개를 단일 머신과 단일 스레드로 실행했을 때 소요되는 130시간을 코어 당 10개의 스레드를 가진 코어 40개로 연결된 어레이를 활용해 5분으로 단축할 수 있습니다! 단 5분만에 870기가바이트(GB)의 정보를 정확히 예측한 것인데요. 정말 놀랍죠?
결론
맨 처음 SAS Viya에 도전할 때에는 조금 떨리기도 했습니다. 그렇지만 이 새로운 플랫폼이 지금까지 모델과 분석을 구축해온 방식을 근본적으로 바꿀 것이라는 사실을 금방 깨달았습니다. 성능은 강력해지고, 반복적인 일상 업무에 소요되는 시간은 크게 절감했습니다. 그래서 SAS9 환경으로 다시 돌아가야 한다는 생각에 고심하고 있답니다. 데이터 사이언티스트로서 가장 중요한 것은 ‘better, faster answers’, 즉 더 나은 답을 더 빨리 찾는 것이며, SAS Viya는 그것을 실현시켜준 솔루션입니다. 미래의 방식인 ‘멀티 스레드 프로세싱’과 함께한다면 자기 계발은 물론 고객이 지금까지 불가능하다고 생각했던 것들을 실현하도록 도울 수 있을 것입니다.
아직 SAS Viya를 경험해보지 못했다면 무료 체험판을 통해 꼭 SAS Viya의 놀라운 혜택들을 직접 경험해보세요!
참고 문헌
- Chen, Tianqi and Carlos Guestrin, “XGBoost: Reliable Large-scale Tree Boosting System”, 2015
- Chen, Tianqi and Carlos Guestrin, “XGBoost: A Scalable Tree Boosting System”, 2016