[Oracle] SQL 병렬 힌트를 부여하여 쿼리 수행시간 단축하기
·
Programming/Oracle
SQL 쿼리를 작성하다 보면 작은 데이터 간단한 데이터 탐색에서는 크게 무리가 되지 않지만, 많은 관계형 디비 안에서 여러개의 데이터 테이블을 조인하고 그룹화하다보면 시간이 매우 오래걸릴 때가 있다. 그 이유는 해당 쿼리를 수행하는데 순차적으로 진행되기 때문이다. 이를 위해 오라클에서는 병렬 힌트를 부여해서 쿼리 수행 시 멀티로 데이터를 가져와 빠르게 응답을 받을 수 있다. 병렬 힌트의 장점은, 어플리케이션 쪽에서 소스를 수정하지 않아도 된다는 점이며, 주석 안에서 힌트를 주는 것이기 때문에 오타가 나도 쿼리가 수행되긴 한다. 그럼, 병렬 쿼리를 사용하는 방법에 대해 알아보도록 하자. 1. 병렬 쿼리 사용 방법 먼저 병렬 처리가 가능할 수 있도록 세션에 권한을 부여한다. SQL> ALTER SESSION..
[Python] HTTP web server log dataframe으로 불러오기 (with pandas)
·
Programming/Python
이번에 프로젝트를 진행하면서 웹 로그 서버의 raw level을 직접 보고 전처리할 기회를 접하게 되었다. 어쨌든 웹로그를 데이터프레임화 시켜서 분포를 보고 데이터 탐색을 진행해야하기 때문에 공통된 룰로 전처리를 하고 데이터프레임화를 시켜야 해서 검색하다보니 아래와 같은 링크를 발견했고, 이에 대해 번역을 해서 기록해두려고 한다. https://mmas.github.io/read-apache-access-log-pandas Read Apache HTTP server access log with Pandas In this post we'll see how to read our Apache HTTP server access log into a Pandas dataframe. First of all, we s..
[Python] 주피터 노트북 테마 변경하기
·
Programming/Python
로컬 상에서 jupyter notebook을 자꾸 사용하려니 흰 바탕에 눈의 피로감이 커지는 것은 사실인 것 같다. 요즘은 모바일 폰도 다크모드가 가능한 마당에, 주피터 노트북도 테마를 변경해서 어두운 모드로 사용하고 싶었다. 그래서 찾아본 것이 jupyter notebook 테마 사용하기!! 주피터 노트북 파일을 전부 설치가 되어있다고 가정하고 포스팅을 적으려 한다. 1. 주피터 노트북 테마 패키지 설치하기 주피터 테마를 설정하려면 먼저 'jupyterthemes'를 설치해야 한다. 터미널로 들어가 아래와 같이 명령어를 입력하여 jupyterthemes를 설치한다. pip install jupyterthemes 그럼 해당 패키지가 설치되고 사용할 수 있는 테마의 목록을 확인 할 수 있다. 아래와 같이 ..
[Python]Pytorch - RuntimeError:Error(s) in loading state_dict ... : Missing key(s) in state_dict: ... Unexpected key(s) in state_dict:... GPU 병렬 사용 문제
·
Programming/Python
모델을 학습시킨 후 저장하고, 다시 불러오는 중에 아래와 같은 문제가 발생했다. torch.save(model.state_dict, '~~.pt')와 같은 방식으로 저장했고, model.load_state_dict(torch.load('~~.pt'))으로 불러왔을 뿐인데 에러는 다음과 같았다. 자세히 보면, model의 state_dict의 키가 맞지 않다는 것을 알 수 있다. 저장한 모델은 'module.' 키가 앞에 붙어있는 반면, 불러올 모델은 키가 붙지 않아 매핑이 안되는 문제였다. 이러한 문제가 생긴 이유는, 다중 GPU를 사용할 때 발생하는 것으로 파악됐다. 다중 GPU를 사용하면서 torch.nn.DataParallel을 사용하면 모델의 state_dict는 model.module의 형태로 ..
[Python] Data Frame apply 함수 병렬처리 하는 방법
·
Programming/Python
파이썬에서 apply함수를 사용할 때 데이터의 용량이 크거나, 힘수가 복잡할 경우 수행시간이 매우 느리다는 단점이 있다. 그렇다면 여러개의 프로세스를 사용해서 처리하는 방법을 고려해야 한다. multiprocessing.cpu_count()를 통해 cpu 코어의 수를 가져와 함수를 생성 후 병렬처리를 할 수 있다. groupby를 사용하지 않고 단순 apply를 사용한다면 아래와 같은 함수를 만든 후 사용하면 된다. from multiprocessing import Pool import multiprocessing print('cpu counts:%d' % multiprocessing.cpu_count()) # cpu 최대 가용 수 확인 def parallelize_dataframe(df, func, n..
[Python] Numpy Float(소수) 출력 표현 설정하기
·
Programming/Python
간혹 numpy array를 출력하다보면 소수점이 길거나, 지수표현으로 되어있어 수치를 정확히 파악하기가 어려운 경우가 있다. 이 때, numpy의 printoption 설정을 변경하면 손쉽게 설정할 수 있다. 자세한 옵션들은 아래 링크 참조 numpy.org/doc/stable/reference/generated/numpy.set_printoptions.html numpy.set_printoptions — NumPy v1.20 Manual If True, always print floating point numbers using fixed point notation, in which case numbers equal to zero in the current precision will print as z..
[Python] python 에서 이유를 알 수 없는 GPU 에러 정리(device-side assert triggered)
·
Programming/Python
cuda를 쓰는게 익숙치 않아서 그런지 에러가 뜨면 난감하고 어디를 수정해야 할 지 모를 때가 너무 많다... 에러문을 구글링하면서 찾다가 잘 정리된 블로그가 있어 남겨놓는다. 나중에 유용하게 자주 사용될 듯 하다. brstar96.github.io/shoveling/device_error_summary/ 이유를 알 수 없는 GPU 에러 정리(device-side assert, CUDA error, CUDNN_STATUS_NOT_INITIALIZED 등등…) brstar96.github.io
[Python] pandas - DataFrame/Series 에서 순위 구하는 함수 rank()
·
Programming/Python
데이터 분석을 처리하다보면 정렬을 하는 경우도 필요하고, 정렬에 대한 그룹별 순위를 구하는 것 또한 필요하다. 그럴때 자주 사용되는 함수가 바로 rank() 함수이다. rank 함수는 아래와 같은 형식으로 사용한다. pd.Series.rank(method = 'average', ascending = True) 위와 같이 rank를 사용하는 경우, 두개의 중요한 옵션이 있다. 1) 동점을 처리하는 방법 2) 오름차순/내림차순 유무 이다. 순위를 구할 때 동점 처리하는 방법은 아래와 같다. method = 'average' : 동점 관측치일 때 그룹 내 평균 순위를 부여(default) method = 'min' : 동점 관측치일 때 그룹 내 최소 순위 부여 method = 'max' : 동점 관측치일 때 ..