해결된 질문
작성
·
4.3K
0
안녕하세요?
저는 이제 막 머신러닝에 관심을 갖고 공부를 시작했습니다. 한 가지 궁금한 점은 저의 경우 100만개 정도 데이터로 머신러닝을 수행하는 경우도 있을 것으로 예상하는 데 머신러닝 속도를 높이는 방법이 궁금합니다. 배워도 속도 때문에 활용도가 낮아질까 염려되어 미리 질문 드립니다. 좋은 강의 감사합니다.
답변 2
4
안녕하십니까,
먼저 파이썬(R도 마찬가지 입니다) 기반의 머신러닝에서 대용량 데이터 처리 시 유의하실 부분에 대해서 말씀 드리고 속도에 대해서 말씀 드리겠습니다.
1. 파이썬 기반의 머신러닝은 대부분 모든 학습 데이터를 일단 메모리에 올린 뒤에 학습을 수행합니다. 만약 서버의 메모리가 8GB 인데 로딩하는 데이터가 8GB를 넘어가면 학습 시 Out of memory가 발생합니다. 사실 전체 메모리가 8GB면 가용 가능한 메모리는 이 보다 훨씬 적습니다(절반 이하로 생각하시면 되며, 필요없는 객체는 바로 메모리에서 삭제하는 코드를 사용하셔야 합니다).
따라서 100만개 정도의 데이터가 서버 메모리에 올라갈 수 있는지 부터 확인해야 합니다. 100만개 레코드이지만 Feature가 많지 않다면 충분히 8GB정도에 올라갑니다. 먼저 Pandas로 data를 로드 한 뒤에 DataFrame.memory_usage() 로 메모리 사용량을 확인해 보시면 알 수 있습니다.
2. 머신러닝의 속도를 높이는 방법은 A. 속도가 빠른 알고리즘을 적용, B. Multi processing 으로 알고리즘을 적용하는 것입니다.
A. 일반적으로 속도가 빠른 알고리즘이 있습니다. Tree기반 앙상블보다는 선형 계열이 빠릅니다. 즉 Logistic Regression이 Random Forest 보다 빠릅니다. 같은 Tree기반 앙상블이더라도 Random Forest가 Gradient Boosting 보다 더 빠릅니다. 또한 XGboost보다는 LightGBM이 더 빠르고 메모리도 더 적게 사용합니다. 그런데 머신러닝의 예측 정확도를 중요시 한다면 학습 속도는 느리지만 보다 성능이 높은 알고리즘을 선택해야 할 수도 있습니다.
B. 서버를 여러개 Core를 가진 시스템으로 구성합니다. 사이킷런은 멀티 core로 병렬 처리를 지원합니다. n_jobs=-1을 Estimator 객체에 초기 파라미터로 설정하면 시스템이 가진 모든 CPU 코어를 병렬로 사용하여 학습하게 됩니다. 즉 8Core CPU가 1Core CPU보다 더 빠르게 학습합니다(그렇다고 8배 빠르지는 않습니다. 선형 성능 확장에 제약은 있습니다).
요약하자면 100만개 Record의 데이터 세트의 피처 갯수가 몇개인지는 확인할 수는 없지만 메모리에만 들어온다면 1~2 시간내에 학습이 가능하며 만약 학습 시간을 더 줄이고자 한다면 8 Core이상의 시스템에서 구동하시면 훨씬 학습 시간을 개선할 수 있을 것입니다.
감사합니다.
0