Jekyll Blog - GitHub Pages에서 GitLab Pages로 이전하기

기존에는 Jekyll 블로그를 GitHub Pages로 deploy해서 사용하고 있었다. junchive.kr라는 custom domain 구입 후 DNS 연결해서 사용하고 있었다. 그런데 사용하면서 GitHub Pages와 관련해서 불편한 점들이 느껴져서 대체할만한 다른 플랫폼을 찾아보았다. jekyll plugin에 제한이 많이 걸려서 원하는 플러그인을 사용할 수 없다는 것과, github workspace가 제공되지만 느리고 불편한 점이 많아서 잘 안쓰게 된다는 이유 때문이었다. GitHub Pages의 문제점 가장 크리티컬한 이유는 바로 plugin의 제한이었다. 기본적으로 jekyll에서 제공하는 jekyll-paginate이 매우 구려서 jekyll-paginate-v2로 옮겨가고 싶었는데, jekyll-paginate-v2-repository에서 밝히듯이 GitHub Pages에 공식적으로 등록된 플러그인이 아니라 사용 불가하다. _config.yml이랑 Gemfile을 건드려봐도 우회해서 사용하는게 자꾸 오류가 떠서 스트레스를 받던 중, ‘안되겠다 옮기자!!’ 생각에 다른 플랫폼으로 옮겨갔다. ...

2023-6-11 · 3 min · 529 words · Junha

논문리뷰 - MolecularRNN Generating realistic molecular graphs with optimized properties

ML, Deep Learning에 관한 강의도 여러 개 봤고, 대학교 데이터학습과지능 강좌에서 전체적인 AI에 대한 Overview와 특징도 알게 되었다. 거기에 더해 실질적인 ML 테크닉을 익히기 위해서 Kaggle Dataset 가지고 분석을 해보았는데, 뭔가가 부족한 느낌이 들었다. 기본적인 머신러닝 툴들에 대한 이해도는 높아졌지만, 정작 domain knowledge을 활용한 결과물은 아직 시도해보지 못했기 때문이다. 솔직히 Tools들에 배우는건 귀찮고 복잡할 뿐이지 생각보다 금방 익히는데, 이걸 본인의 전공 지식에 적용하는 건 또 다른 이야기다. 또한 실제로 현대과학은 지금 딥러닝 기술들을 어떻게 활용하고 있는지도 궁금해져서 관련 논문들을 뒤져보았다. 학부가 화학과인 만큼 화학 분야의 지식들을 활용한 결과물을 탐색하다가 OpenChem이라는 open project를 만나게 되었다. ...

2023-6-11 · 3 min · 602 words · Junha

백준 11725번 - 트리의 부모 찾기

백준 11725번 바로가기 나의 풀이 # 입력 import sys n = int(sys.stdin.readline().strip()) graph = {} for _ in range(n-1): a,b = map(int, sys.stdin.readline().split()) if a in graph: graph[a].append(b) else: graph[a] = [b] if b in graph: graph[b].append(a) else: graph[b] = [a] visitedList = [False]*n parent = {} # 처리 def BFS(graph, node, visitedList): from collections import deque queue = deque([node]) visitedList[node-1] = True while queue: temp = queue.popleft() for i in graph[temp]: if not visitedList[i-1]: queue.append(i) visitedList[i-1] = True parent[i] = temp BFS(graph, 1, visitedList) for i in sorted(parent.items()): print(i[1]) CODE REVIEW BFS을 활용한 문제. 각 node별로 부모 node를 구하는 문제였다. 방향성이 없는 연결이라 (a,b)에 대해서 graph[a]=b graph[b]=a 모두 graph에 포함시켜야하는걸 잊지 말자. dictionary의 key를 기준으로 정렬하기 위해서는 sorted(dict.items())를 활용하면 된다. 그러면 (key,value)쌍으로 된 List를 리턴해준다.

2023-6-11 · 1 min · 126 words · Junha

백준 1697번 - 숨바꼭질

백준 1697번 바로가기 내 풀이 # 입력 import sys n, k = map(int, sys.stdin.readline().split()) from collections import deque queue = deque([n]) visitedList = [False]*100001 count = 0 # 처리 while queue: if k in queue: print(count) break count += 1 for _ in range(len(queue)): temp = queue.popleft() if not visitedList[temp]: next = [temp-1,temp+1,temp*2] for n in next: if 0<=n<=100000 and visitedList[n]==False: queue.append(n) visitedList[temp] = True CODE REVIEW BFS를 응용한 문제. 100,001개의 node을 가진 graph를 구해놓고 최소경로를 구하는 방법도 있겠지만, 메모리나 시간적으로 매우 비효율적이다. 따라서 초기 queue에 n을 집어놓고 BFS로 나아가면서 k가 queue에 등장하는지 확인하는 방법으로 구현했다. count를 구현하는 과정에서 꽤나 애를 먹었다… 처음에는 count=[0]*100001 count[n]=count[temp]+1로 두고 풀었는데, count를 탐색하는 과정에서 시간을 많이 잡아먹어서 아예 구조를 바꾸었다. for _ in range(len(queue))로 BFS 한 층이 다 마무리 될 때까지 loop를 돌리는 방식으로, loop마다 count를 1씩 올려가며 탐색을 진행하니 시간 문제 없이 해결되었다.

2023-6-11 · 1 min · 140 words · Junha

XGBoost with GPU

ML(머신러닝) 처리 과정에서는 많은 연산 과정을 필요로 하는데, 이 때문에 많은 시간과 메모리를 필요로 한다. CPU가 단독으로 처리 과정들을 수행하기에는 버거워서 GPU나 TPU 그리고 이런 과정들에 특화된 NPU을 활용하기도 한다. 이런 Accelerator들을 동일 과정을 효과적으로 처리해준다. Kaggle에서 기본적으로 제공하는 Accelerator의 종류에는 GPU T4 x2 GPU P100 TPU VM v3-8가 있다. Kaggle - Regression with a Crab Age Dataset에서 Fine-Tuning & Optimization 과정에서 시간이 너무 오래 걸리길래 GPU을 활용해서 해결해보기로 했다. GPU을 이용하지 않은 경우(위)와 이용한 경우(아래)를 비교해보면 시간 측면에서 확연한 차이를 확인할 수 있다. 기존 1017.1s이었던 과정은 GPU을 이용해서 145.4s로 줄었는데 거의 85%의 시간 감소라 놀라웠다. ...

2023-6-8 · 2 min · 229 words · Junha