728x90
반응형
SMALL
1. Flask
- 2010년에 Armin Ronacher에 의해 개발된 경량 웹 프레임워크
- Flask는 최소한의 추상화를 제공하면서도 유연하고 확장 가능한 방식으로 웹 어플리케이션을 구축할 수 있음
- [플라스크 홈페이지]
더보기https://flask.palletsprojects.com/en/2.3.x/
Welcome to Flask — Flask Documentation (2.3.x)
flask.palletsprojects.com
1-1. 예제 다루기
✅ 새로운 프로젝트에 'app.py' 파일 생성
✅ Flask 패키지 설치
app = Flask(__name__)
# __name__: 스페셜메소드(이 프로그램의 이름을 알려줌), 외부에서 임포트를 할 경우에는 외부 파이썬 파일의 이름이 들어옴
@app.route('/')
def hello():
return 'Hello Flask!!'
# 자체적으로 실행할 경우(if문이 실행되지않는 경우는 외부에서 임포트한 경우)
if __name__ == '__main__':
app.run(debug=True) # 에러가 날 경우 표시함, 배포시에는 False
1-2. 머신러닝 결과를 서버로 띄우기
✅ 패키지 설치
✅ LinearSVC 모델을 만들고 학습하는 모듈 파일 만들기
import torch
import torch.nn as nn
import torch.optim as optim
# 학습데이터
x_train = torch.FloatTensor([[73, 80, 85],
[93, 88, 93],
[89, 91, 90],
[96, 98, 100],
[76, 66, 70]])
y_train = torch.FloatTensor([[152], [185], [180], [196], [142]])
# 모델 설계(선형회귀)
model = nn.Linear(3, 1)
# 옵티마이저는 SGD 사용
optimizer = optim.SGD(model.parameters(), lr=0.00001)
# 학습
epochs = 1000
for epoch in range(epochs+1):
y_pred = model(x_train)
loss = nn.MSELoss()(y_train, y_pred)
optimizer.zero_grad() # 기울기 초기회
loss.backward() # 역전파
optimizer.step() # 기울기 업데이트
if epoch % 100 == 0:
print(f'Epoch {epoch}/{epoch} Loss: {loss: .6f}')
torch.save(model.state_dict(), 'model.pth') # 학습 모델 저장
✅ 머신러닝 모델을 불러와 서버에서 json형태로 데이터를 보내고 결과 띄우기
from flask import Flask, request, jsonify
from sklearn.svm import LinearSVC
from sklearn.metrics import accuracy_score
app = Flask(__name__)
learn_data = [[0, 0], [1, 0], [0, 1], [1, 1]]
learn_label = [0, 0, 0, 1]
svc = LinearSVC()
svc.fit(learn_data, learn_label)
@app.route('/predict', methods=['POST'])
def predict():
data = request.json['data']
pred = svc.predict(data)
acc = accuracy_score(learn_label, pred)
return jsonify(acc)
if __name__ == '__main__':
app.run(debug=True)
2. FastAPI
- 비교적 최근에 등장한 웹 프레임워크
- 파이썬 3.6 버전 부터 지원
- Type Annotation을 사용 (@을 쓰는 방식)
- 풍부한 자유도(무겁게 사용할수도 가볍게 사용할수도 있음)
- 자동 스웨거(Swagger) 지원
- 포스트맨을 사용하지 않고 포스트맨 기능을 구현할 수 있는 화면이 있음
- 큰 커뮤니티가 있지만 아직 작은 생태계(파이썬보다 자바 웹 개발자 규모가 크기 때문)
2-1. Uvicorn
- ASGI(Asynchronous Server Gateway Interface) 서버
- 비동기 처리를 지원하며, 높은 성능을 발휘할 수 있음
- 비동기 처리
- 작업들이 동시에 진행되거나, 한 작업의 결과를 기다리지 않고 다른 작업을 동시에 실행하는 프로그래밍 패턴
- 멀티스레드 방식보다 더욱 빠른 속도를 보장
- Swagger와 같은 API 문서 자동화 기능을 제공
- API 개발 시 생산성을 높일 수 있음
2-2. Swagger
- API 문서를 자동으로 생성해주는 강력한 도구
- API의 엔드포인트, 파라미터, 응답 형식 등을 시각적으로 표현하여 사용자가 API를 쉽게 이해하고 테스트할 수 있도록 도와줌
- http://127.0.0.1:8000/docs
2-3. 예제 다루기
✅ FastAPI 패키지 설치
✅ get방식으로 서버에 데이터 띄우기
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def index():
return {"index": "Hello! FastAPI"}
@app.get("/math/sum")
def math_sum(num1: int, num2: int):
return {"result": num1 + num2}
📍 터미널에 uvicorn 실행코드를 실행시켜 서버를 띄운다!
✅ Flask로 구현한 선형회귀 모델을 FastAPI를 이용하여 구현해 보자.(POST 방식으로)
📄 모델 파일
import torch
import torch.nn as nn
from fastapi import FastAPI, Request
app = FastAPI()
model = nn.Linear(3, 1)
model.load_state_dict(torch.load('model.pth'))
model.eval()
@app.post("/predict/")
async def predict(request: Request):
data = await request.json()
data = data["data"]
x_test = torch.FloatTensor(data)
y_pred = model(x_test)
return {
"pred": y_pred.tolist()
}
📍 포스트맨으로 결과 확인
728x90
반응형
LIST