일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Numerical Analysis
- MATLAB
- 논문작성
- 수치해석
- 에러기록
- 수식삽입
- 고체역학
- 옵시디언
- 우분투
- IEEE
- LaTeX
- 인공지능
- ChatGPT
- obsidian
- WOX
- Julia
- Linear algebra
- pytorch
- 논문작성법
- JAX
- Dear abby
- 텝스공부
- 텝스
- Python
- matplotlib
- Statics
- teps
- 생산성
- Zotero
- 딥러닝
- Today
- Total
뛰는 놈 위에 나는 공대생
[프로그래밍] MPI를 windows에서 사용하는 방법 본문
필자는 컴퓨터 전공이 아니라서 아주 기초적인 컴공 지식 밖에 모른다.
그래서 다른 사람의 소스코드를 쓰다가 어려움을 겪었는데 간단한 결과를 소개하고자 한다.
내가 쓰려고 했던 것은 딥러닝 학습에서 네크워크의 gradient surface를 보여줄 수 있는 그림이었다.
이를 위해서
https://github.com/tomgoldstein/loss-landscape
이곳에 있는 코드를 쓰고 싶었다. 그런데
mpirun -n 4 python plot_surface.py --mpi --cuda --model resnet56 --x=-1:1:51 --y=-1:1:51 \
--model_file cifar10/trained_nets/resnet56_sgd_lr=0.1_bs=128_wd=0.0005/model_300.t7 \
--dir_type weights --xnorm filter --xignore biasbn --ynorm filter --yignore biasbn --plot
다음과 같은 코드를 보고 어떻게 써야하는지 몰라서 고생했다.
MPI(message Passing Interface)라고 해서 구글에 검색했을 때 가장 먼저 나온 결과를 보면, 병렬 프로그램을 여러 대의 컴퓨터에 돌리기 위해 메시지를 전달해주는 프로그램이라고 한다. 깊게 이해하기에는 내 전공과 관련이 없어보여서 일단은 사용하는 방법에 집중하였다.
사람들이 C코드 내지 C++코드에서 MPI 헤더를 import하여서 프로그램을 짜고, 이 프로그램을 Linux shell에서 동작시키는 것을 보았다. 물론 Linux에서도 셋팅이 필요하겠지만 일단 참고하지 않았다.
그런데 나는 리눅스를 쓸 생각이 없는데다가 python을 써야했기 때문에 좀 더 찾아보았다.
찾아본 결과, windows에서는 Microsoft MPI라는 프로그램이 있어서
https://www.microsoft.com/en-us/download/details.aspx?id=54607
위의 사이트에 들어가서 Microsoft MPI를 다운받는다.
사이트에서 Download 버튼을 누르면
다음과 같이 나오는데 반드시 두 개 다 다운받아서 설치해야한다. 아래 MSMpiSetup.exe만 설치해도 되는 줄 알았다가 나중에 동작이 안되는 걸 알고 다 설치했다.(...)
그런 다음에 명령프롬프트를 열어서
mpiexec -help
를 명령어에 치면 제대로 동작할 때 설치된 것이다.
나는 위와 같이 나왔다.
참고로 Linux에서는 <mpirun>이라는 명령어를 쓰고 windows에서는 <mpiexec>라는 명령어를 쓴다고 한다.
그리고 이제 내가 원하는 python 파일을 실행하면 된다.
다만 그냥 명령프롬프트에서 python 파일을 실행하면 라이브러리를 import할 때 문제가 많이 생길 것이다.
anaconda prompt에서 내가 원하는 가상환경에서 돌리도록 하자.
참고자료
https://nyu-cds.github.io/python-mpi/setup/
'프로그래밍 Programming' 카테고리의 다른 글
[에러기록] 아나콘다와 관련된 수많은 에러들 (0) | 2022.12.29 |
---|---|
[에러기록] CondaHTTPError: HTTP 000 CONNECTION FAILED for url (0) | 2022.12.26 |
[매트랩MATLAB] Symbolic expression에서 미분 및 적분 수행 (0) | 2022.07.02 |
[C/C++] 포인터와 배열의 관계 (0) | 2021.08.08 |
Git bash 명령어 정리 (5) 협업을 위한 관리 (0) | 2021.07.20 |