pytorch 를 사용하는데 세팅을 자주 하는게 아니다 보니 매번 까먹어서 기록할려는 글.

windows용 도커도 조만간 만들어야겠다.

 

1. cuda 설치

 

https://developer.nvidia.com/cuda-11-7-0-download-archive?target_os=Windows&target_arch=x86_64&target_version=10 

 

CUDA Toolkit 11.7 Downloads

Resources CUDA Documentation/Release NotesMacOS Tools Training Sample Code Forums Archive of Previous CUDA Releases FAQ Open Source PackagesSubmit a BugTarball and Zip Archive Deliverables

developer.nvidia.com

현재까진 pytorch 가 cuda 11.7 버전까지 지원하는 듯 하여 최신버전인 12.0 대신 11.7 버전을 설치했다.

 

2. cuDNN 설치 (로그인 필요)

 

https://developer.nvidia.com/rdp/cudnn-archive

 

cuDNN Archive

Download releases from the GPU-accelerated primitive library for deep neural networks.

developer.nvidia.com

 

cuDNN 설치.11.x 버전을 설치하면 된다

설치된 파일을 cuda 설치한 폴더로 옮긴다

 

3. Pytorch 설치

pytorch가 설치되어있다면 pytorch 버전 먼저 확인한다

import torch
print(torch.__version__)
# 1.13.0+cpu

print(torch.cuda.is_available())
# False

보니깐 cpu 버전으로 설치되어 있더라... 그래서 cuda 사용이 불가능 했었다.

일단 uninstall 해주고,

 

pip3 install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117

 

해당 커맨드로 11.7 버전용 pytorch 를 설치해줬다.

 

import torch
print(torch.__version__)
# 1.13.0+cu117

print(torch.cuda.is_available())
# True

그 다음 버전을 확인하니 cuda 버전으로 뜬다.

$ pip install flask_cors
from flask import Flask
from flask_cors import CORS
app = Flask(__name__)
CORS(app)

if __name__ == '__main__':
    app.run(host='0.0.0.0')

 

 

app.debug = True

 

플라스크를 디버그모드로 동작시키면 서버가 켜지기전 초기화를 위한 코드들이 2번씩 실행된다.

이거때문에 쓰레드가 2개 실행되길래 해결법을 찾아봤다

 

import os
if os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
    print("INIT")

# 그 외 flask, python 코드들...
#
#if __name__ == '__main__':
#	app.run(~~~~)
#   

 

위에 3줄만 보면 된다.

print() 쪽에 초기화 함수를 추가해서 사용하자

 

Reference : https://stackoverflow.com/questions/9449101/how-to-stop-flask-from-initialising-twice-in-debug-mode

 

python 을 실행할 때 argument 를 줘서 실행해보려고한다.

 

전체코드

#app.py

import argparse

# python app.py -h 를 치면 나오는 메세지
parser = argparse.ArgumentParser(description="-h Help message")

parser.add_argument('--arg1', required=True)
parser.add_argument('--arg2', required=False)
args = parser.parse_args()
arg1 = args.arg1
arg2 = args.arg2

print(arg1,arg2)

 

실행

$ python app.py --arg1 Hello
Hello None
$ python app.py --arg1 Hello --arg2 World
Hello World

 

 

parser.add_argument('--arg1', required=True)

required 를 True 로 주면 실행할 때 값을 안주면 에러를 출력한다.

False 로 주고 값을 안주면 None

 

parser.add_argument('--arg2', required=False, default='World', help='help msg')

default 값을 줄수도, 각 argument 마다 도움메세지를 지정해줄수도 있다.

 

1. request.args.get('name') 으로 구하기

 

python flask 코드

# app.py

from flask import Flask, request

app = Flask(__name__)

@app.route('/get')
def get():
    arg = request.args.get('data')
    arg2 = request.args.get('data2')
    print(arg,arg2)
    return arg + arg2

app.run(host='0.0.0.0', debug=True, port="1234")

http://localhost:1234/get?data=Hello&data2=World 

 

 

2. URL 에 변수 추가하기

 

# app.py

from flask import Flask, request

app = Flask(__name__)

@app.route('/get/<arg>/<arg2>')
def get(arg,arg2):
    print(arg,arg2)
    return arg + arg2

app.run(host='0.0.0.0', debug=True, port="1234")

 

http://localhost:1234/get/Hello/World

 

편한 방법으로 사용하자.

 

Reference : https://flask.palletsprojects.com/en/1.1.x/quickstart/

+ Recent posts