티스토리 뷰

Python Multi core processing

전부터 멀티코어 프로세싱에 관심은 있었는데, 막상 천천히 공부해 보지는 않고 생각만 하고 있었다. multiprocessing 과 같은 패키지는 알고 있었지만. 당장 결과에 적용하기가 쉽지 않았다고 해야하나. 코딩 실력도 부족하기도 했고. 어쩌다 검색으로 알게된 최신 멀티코어 프로세싱 패키지 Ray. 대충 봤는데 뭔가 적용하기 쉬울 것 같다. API page를 보면서 차근차근 공부해야겠지만. 일단은 적용가능한 데이터가 어떤게 있을지 부터 막막하니. 한줄이라도 처보자!

 

alphas = np.linspace(0.0001,0.001) 

start = time.time() 
# 여러 alpha 값을 넣어주고, alpha일 때 ridge regression 해서 최적 alpha값을 CV로 검증 
ridge = RidgeCV(alphas=alphas, normalize=True, cv=5) 
ridge.fit(X_train, y_train) print(ridge.alpha_) 

# 전체 feature를 넣고 5-fold CV해서 최적 alpha로 도출 된 값 
print('duration=',time.time()-start) 

# 훈련 set에서 평가 지표 
y_pred = ridge.predict(X_train) 
mse, _= evalfun(y_train, y_pred) print(f'Train set MSE : {mse:.2f}')

 

위 코드는 오늘 과제에서 만들었던 Ridge regression 수행 코드, np.linspace의 alpha 값에 대해서 model을 5-fold Cross-validation 으로 돌려가면서 최적(MSE 최소) alpah값을 찾는다.

 

alphas = np.linspace(0.0001,0.001) 

ray.shutdown() 
ray.init(num_cpus=4) 

@ray.remote 
def do_ridgecv(alphas, X_train, y_train): 
	ridge = RidgeCV(alphas=alphas, normalize=True, cv=5) 
    ridge.fit(X_train, y_train) # print(ridge.alpha_) 
    return ridge 
    
start = time.time() 
result_ids = [do_ridgecv.remote(alphas, X_train, y_train) for x in range(5)] 
results = ray.get(result_ids) 
print('duration=',time.time()-start)

 

RidgeCV model.fit하는 인스턴스 부분을 함수로 만들고, @ray.remote 데코레이터를 붙여준다. 그리고 .remote()로 호출해주면 끝! 물론 예상했던 일이지만, 오히려 실행속도는 느려진다. 전체 train data set X, Y가 필요한 연산인데, 굳이굳이 쪼개서 이리저리 나눠서 다시 붙이는데 시간 손실이 클 수 밖에 없을 것이다. 그보다 중요한 건, 쓰기가 매우 편하다는 사실이다. 당장 패키지를 코드에 적용 하는 것보다. 어떤 형태의 연산에 써야 할지 고민해야 할 것 같다. 종종 시간이 허락할 때, 공식 API문서를 천천히 보고 직접 해보는 연습이 필요할 것.

오늘 한 일

해야 할 일

Tips for first-time users https://docs.ray.io/en/master/auto_examples/tips-for-first-time.html

참고  https://zzsza.github.io/mlops/2021/01/03/python-ray/

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함