H2O의 장점은 기본적인 R 패키지와 달리 다양한 기능을 제공할 뿐 아니라 다른 설정 없이도 멀티쓰레드 및 다수의 컴퓨터를 이용한 인공지능 연산이 가능하다는 것입니다. 하지만 그렇다고 해서 코어의 숫자에 따라 성능이 비례적으로 증가하지는 않습니다. 여러 가지 이유로 성능 향상폭은 그보다 낮은 편입니다. 여기서는 쓰레드를 4개, 8개, 12개 할당했을 때 학습 시간의 차이를 비교해 보겠습니다.
library(h2o)
localH2O = h2o.init(ip = "localhost", port = 54321, startH2O = TRUE,min_mem_size = "10G",nthreads = 4)
trainfile = "H:/data/deeplearning/MNIST_train1.csv"
train = h2o.importFile(path = trainfile,sep=",")
testfile = "H:/data/deeplearning/MNIST_test1.csv"
test = h2o.importFile(path = testfile,sep=",")
y <- span="">->
x <- names="" setdiff="" span="" train="" y="">->
# We encode the response column as categorical for multinomial
#classification
train[,y] <- as.factor="" span="" train="" y="">->
test[,y] <- as.factor="" span="" test="" y="">->
# Train a Deep Learning model and valid
start_time <- span="" sys.time="">->
model_cv <- h2o.deeplearning="" x="1:784,</span">->
y = 785,
training_frame = train,
activation = "RectifierWithDropout",
hidden = c(1000,100,1000),
input_dropout_ratio = 0.2,
l1 = 1e-5,
epochs = 600)
model_cv
end_time <- span="" sys.time="">->
end_time - start_time
> end_time - start_time
Time difference of 6.472889 mins
앞서 포스팅 한 것처럼 시간은 start_time <- -="" 10gb="" 16="" 2700="" 32gb="" 4="" 6.47="" 8="" end_time="" nbsp="" span="" start_time="" sys.time="">->
> end_time - start_time
Time difference of 6.393961 mins
의외로 시간은 6.39분으로 별로 단축이 되지 않았습니다. 12쓰레드 지원은 어떨까요?
> end_time - start_time
Time difference of 5.55748 mins
5.56분으로 1분 정도 단축되는 정도에 그쳤습니다. 혹시 자원 할당이 잘 되지 않았는지 궁금해서 작업 관리자를 살펴봤습니다.
CPU 자원은 80% 이상 사용하고 있으며 다른 리소스를 차지하는 어플리케이션은 없는 상태에서 진행했습니다. 하지만 종종 CPU 로딩이 40% 이하로 감소했으며 이는 모든 과정에서 멀티 쓰레드를 이용하는 것이 아니라 병목 구간이 있다는 점을 시사합니다. 아마도 이런 점 때문에 멀티 코어에 의한 메리트가 적게 나타나는 것으로 보입니다. 하지만 학습 데이터의 양이 크게 늘어나고 모델이 복잡해지면 멀티 쓰레드 사용으로 인한 이점은 더 크게 나타날 것으로 생각합니다.
그렇긴 해도 생각보다 낮은 성능 향상폭인데 왜 그런지도 고민해 봐야 하겠습니다.
댓글
댓글 쓰기