728x90
728x90
일단 가장 기본 코드부터 테스트 해봅시다
python 파일은 main.py로 만들어 줬습니다.
from fastapi import FastAPI
# 오브젝트 생성
app = FastAPI()
@app.get('/')
def root():
return{'message':'Hello World'}
이렇게 작성하고 powershell에서
uvicorn main:app --reload
이렇게 작성하면 서버가 하나 켜지는 느낌이네요
저는 윈도우라 이렇게 실행해야 되네요
curl.exe -X GET "http://127.0.0.1:8000"
이런 출력이 나오는 것을 확인할 수 있습니다.
이번에는 입력을 넣어주면 모델을 거쳐서 출력이 나오는 코드 입니다.
from fastapi import FastAPI
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM,AutoTokenizer
# 기본 모델 가져오기
base_model = AutoModelForCausalLM.from_pretrained("SmolLM1.7B")
# 로컬 경로로 PeftModel 불러오기
model = PeftModel.from_pretrained(base_model,"saved_model")
# 로컬 경로로 tokenizer 불러오기
tokenizer = AutoTokenizer.from_pretrained("saved_model")
def get_answer(prompt):
#prompt = "what is a road runner?"
inputs = tokenizer(prompt, return_tensors='pt')
generate_ids = model.generate(inputs.input_ids, max_length = 50)
output = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
return output
# 오브제긑 생성
app = FastAPI()
@app.get('/')
def root():
return{'message':'Hello World'}
@app.get('/chat')
def test(user_message):
return{'message': get_answer(user_message)}
curl.exe -X GET "http://127.0.0.1:8000/chat?user_message=TH"
user_message 뒤에 넣고 싶은 prompt를 작성하면 됩니다.
헛소리만 합니다 ㅎㅎ...
그러나 여기선 공백을 넣으면 오류가 납니다!
포스트를 사용하면 오류를 없앨 수 있습니다.
from fastapi import FastAPI
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM,AutoTokenizer
# 기본 모델 가져오기
base_model = AutoModelForCausalLM.from_pretrained("SmolLM1.7B")
# 로컬 경로로 PeftModel 불러오기
model = PeftModel.from_pretrained(base_model,"saved_model")
# 로컬 경로로 tokenizer 불러오기
tokenizer = AutoTokenizer.from_pretrained("saved_model")
def get_answer(prompt):
#prompt = "what is a road runner?"
inputs = tokenizer(prompt, return_tensors='pt')
generate_ids = model.generate(inputs.input_ids, max_length = 50)
output = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
return output
# 오브제긑 생성
app = FastAPI()
@app.get('/')
def root():
return{'message':'Hello World'}
@app.get('/chat_test')
def test(user_message):
return{'message': get_answer(user_message)}
@app.post('/chat')
def test(param : dict={}):
user_message=param.get('user_message', ' ')
return {'message': get_answer(user_message)}
포스트 방식이기 때문에 호출하는 방법도 바뀝니다.
curl.exe -d '{"user_message": "the math works"}' -H "Content-Type: application/json" -X POST http://127.0.0.1:8000/chat
윈도우에서 하면 이거 오류나더라고요,,,,
curl.exe -d "{\"user_message\": \"the math works\"}" -H "Content-Type: application/json" -X POST http://127.0.0.1:8000/chat
이렇게 변경해서 cmd에서 하니까 출력 나옵니다.
이제 인풋도 삭제해 봅시다.
from fastapi import FastAPI
from peft import PeftModel, PeftConfig
from transformers import AutoModelForCausalLM,AutoTokenizer
# 기본 모델 가져오기
base_model = AutoModelForCausalLM.from_pretrained("SmolLM1.7B")
# 로컬 경로로 PeftModel 불러오기
model = PeftModel.from_pretrained(base_model,"saved_model")
# 로컬 경로로 tokenizer 불러오기
tokenizer = AutoTokenizer.from_pretrained("saved_model")
def get_answer(prompt):
#prompt = "what is a road runner?"
inputs = tokenizer(prompt, return_tensors='pt')
generate_ids = model.generate(inputs.input_ids, max_length = inputs.input_ids.shape[1]+15)# 입력 길이에 +n만큼 출력한다.
output = tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
output = output[len(prompt):]
return output
# 오브제긑 생성
app = FastAPI()
@app.get('/')
def root():
return{'message':'Hello World'}
@app.get('/chat_test')
def test(user_message):
return{'message': get_answer(user_message)}
@app.post('/chat')
def test(param : dict={}):
user_message=param.get('user_message', ' ')
return {'message': get_answer(user_message)}
입력도 자르고, 출력 제한도 확실하게 주니까 깔끔해졌네요
728x90
'인공지능 > 자연어 처리' 카테고리의 다른 글
자연어 처리 복습 1 - transformer, token, attention (0) | 2024.08.26 |
---|---|
학습한 모델 웹사이트 챗봇으로 시각화 하기! - 모델 서빙하기 2 (0) | 2024.08.14 |
python 실습 - Huggingface SmolLM fine-tuning 하기 with LoRA - matlab data (0) | 2024.07.25 |
SLM Phi-3 활용해서 Parameter efficient fine-tuning 진행하기 (1) | 2024.07.23 |
LLaMa3 LoRA를 통해 parameter efficient fine-tuning 진행하기 2(Matlab 도메인) - python (10) | 2024.07.22 |