torch serve를 이용해서 Tabular 데이터 Inference API 이용하기

안녕하세요! 현재 Torch Serve의 Inference API를 이용하려고 하는데요. 제가 다루려는 데이터는 이미지, 텍스트가 아닌 단순 2차원 Tabular 데이터입니다(ex. 타이타닉 데이터 같은) 이때 Inference가 잘 되는지 curl 로 테스트해보려고 하는데, request body를 어떤 형식으로 전달해야 하는지 궁금해서 질문드립니다. 코드 예시를 통해 알려주면 더욱 감사하겠습니다.
Torch Serve Inference API 의 공식 튜토리얼에서는 이미지 데이터에 대한 API 형식 예시밖에 없더라구요!

  • 아래 답변은 OpenAI의 GPT-4-Turbo 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요 young-hun-jo님, Torch Serve를 이용하여 Tabular 데이터에 대한 Inference API를 구성하고자 하는 과정에서 어려움을 겪고 계신 것 같네요. 이미지나 텍스트가 아닌 Tabular 데이터를 다루는 것에 대한 질문이시군요. 요청 본문(request body)을 어떻게 구성해야 하는지에 대한 예시 코드가 필요하신 것으로 이해했습니다.

Torch Serve는 모델을 배포하고 추론 서비스를 제공하기 위한 도구로, 다양한 데이터 유형에 대해 유연하게 사용할 수 있습니다. Tabular 데이터의 경우, 일반적으로 JSON 형식으로 데이터를 전송하는 것이 편리합니다. 아래는 curl을 사용하여 JSON 형식의 Tabular 데이터를 Torch Serve의 Inference API로 전송하는 예시 코드입니다.

# JSON 형식의 데이터를 준비합니다.
# 예를 들어, 타이타닉 데이터셋의 승객 정보를 JSON으로 표현한 것입니다.
# 여기서는 간단한 예시로 'Age', 'Fare', 'Pclass' 등의 필드를 사용합니다.
DATA='{
  "Age": 30,
  "Fare": 9.6875,
  "Pclass": 2,
  "SibSp": 0,
  "Parch": 0,
  "Sex_male": 1
}'

# curl을 사용하여 JSON 데이터를 POST 요청으로 Torch Serve의 추론 엔드포인트로 전송합니다.
# 여기서 'http://localhost:8080/predictions/your_model_name'는 Torch Serve가 실행 중인 주소와 모델 이름으로 대체해야 합니다.
curl -X POST http://localhost:8080/predictions/your_model_name -T "$(echo $DATA)"

위의 예시에서 your_model_name은 Torch Serve에 등록된 모델의 이름으로 대체해야 합니다. 또한, Torch Serve가 실행 중인 서버의 주소와 포트 번호에 따라 localhost:8080 부분을 적절히 수정해야 합니다.

Torch Serve의 공식 문서에서는 주로 이미지 데이터에 대한 예시가 많지만, JSON 형식으로 데이터를 전송하는 방법은 Tabular 데이터에도 동일하게 적용됩니다. 다만, 모델의 입력 형태에 맞게 JSON 데이터를 구성해야 하며, 이는 모델을 학습할 때 사용한 데이터의 형태와 일치해야 합니다.

추가적으로, Torch Serve의 공식 문서를 참고하시면 더 많은 정보를 얻을 수 있습니다. 아래는 Torch Serve의 공식 문서 링크입니다:

제가 제공한 정보가 정확하지 않을 수도 있으니, 실제 환경에서 테스트하며 필요한 조정을 해보시기 바랍니다. 추가적인 질문이나 문제가 발생하면 언제든지 질문해 주세요. Torch Serve를 사용한 Tabular 데이터 추론에 성공하시길 바랍니다!


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 Anthropic의 Claude-2 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요 young-hun-jo님! 제가 Tabular 데이터 Inference API 사용에 대한 질문을 이해했습니다.

먼저 Tabular 데이터를 Inference API에 올바르게 전달하는 것은 중요한 문제라고 생각합니다. Tabular 데이터는 일반적으로 Pandas DataFrame이나 NumPy array와 같은 구조로 저장되기 때문에, 이를 JSON 형태로 변환하여 API request body에 포함시켜주는 것이 좋습니다.

구체적인 예시 코드는 다음과 같습니다:

import pandas as pd
import numpy as np
import json

# 모델 입력 데이터 
data = pd.DataFrame(np.random.rand(5,3), columns=['A', 'B', 'C']) 

# 데이터를 JSON으로 변환
data_json = data.to_json(orient='records') 

# Curl request 예시
curl -X POST http://localhost:8080/predictions/tabular -H "Content-Type: application/json" -d '{"data": ${data_json}}'

여기서는 Pandas의 to_json() 메소드를 사용하여 DataFrame을 JSON 문자열로 변환하였습니다. orient='records' 옵션을 주면 각 row를 JSON object로 매핑하여 변환합니다.

이렇게 생성한 JSON 데이터를 request body의 "data" 필드에 assign하여 TABULAR 모델에 제출하면 정상적으로 inference가 수행될 것입니다.

다만 TABULAR 모델이 이러한 JSON 입력 형식을 예상하고 있어야 하겠죠. 모델 쪽에서는 입력으로 받은 JSON을 다시 DataFrame으로 변환하는 로직이 필요할 것 같습니다.

이상으로 Tabular 데이터를 TorchServe Inference API로 제출하는 방법에 대한 간략한 예시를 드렸습니다. 문제가 있다면 언제든지 댓글 남겨주세요! 감사합니다 :slight_smile:


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!
  • 아래 답변은 OpenAI의 GPT-4 모델로 자동 생성한 것으로, 정확하지 않을 수 있습니다.
  • 잘못된 답변을 보셨다면 댓글로 첨삭 지도 부탁드립니다. :sweat_smile:

안녕하세요, 질문을 주셔서 감사합니다. PyTorch Serve의 Inference API를 이용하여 Tabular 데이터에 대한 Inference를 진행하려는 것으로 이해했습니다. 이미지나 텍스트 데이터가 아닌 2차원 Tabular 데이터를 다루려고 하시는데, 이때 curl을 이용하여 테스트하려고 하시는데 어떤 형식으로 request body를 전달해야 하는지에 대한 질문이신 것 같습니다.

Torch Serve의 Inference API는 기본적으로 HTTP POST 요청을 통해 데이터를 전달받습니다. 이때, 데이터는 request body에 포함되어 전달되며, 이 데이터는 일반적으로 JSON 형식을 가집니다. 따라서, Tabular 데이터를 전달하려면 이 데이터를 JSON 형식으로 변환해야 합니다.

Python에서는 json 모듈을 이용하여 이를 쉽게 수행할 수 있습니다. 아래는 간단한 예시 코드입니다.

import json
import requests

# Tabular 데이터를 dictionary 형태로 표현
data = {
    "passengerId": 1,
    "pclass": 3,
    "name": "Braund, Mr. Owen Harris",
    "sex": "male",
    "age": 22,
    "sibSp": 1,
    "parch": 0,
    "ticket": "A/5 21171",
    "fare": 7.25,
    "cabin": "",
    "embarked": "S"
}

# dictionary를 JSON 형식으로 변환
json_data = json.dumps(data)

# POST 요청을 보내고 응답을 받음
response = requests.post("http://localhost:8080/predictions/my_model", data=json_data)

# 응답 출력
print(response.text)

위 코드에서 my_model은 사용하고 있는 모델의 이름이며, localhost:8080은 Torch Serve가 실행되고 있는 주소입니다. 이를 적절히 변경하여 사용하시면 됩니다.

이렇게 JSON 형식으로 데이터를 전달하면, Torch Serve에서는 이 데이터를 받아 모델의 입력으로 사용하게 됩니다. 이때, 모델의 입력 형식과 JSON 데이터의 형식이 일치해야 하므로 이 점을 주의하셔야 합니다.

더 자세한 내용은 PyTorch Serve의 공식 문서를 참조하시면 좋을 것 같습니다. 아래 링크를 참조해주세요.

답변이 도움이 되었길 바라며, 추가적인 질문이 있으시면 언제든지 말씀해주세요.


  • 답변이 어떠셨나요? 괜찮았다고 생각하신다면 아래 :heart:를 한 번 눌러주시길 부탁드려요!

해결하였습니다! request 건이 단 건일 경우, 아래처럼 request를 날리면 되는 것 같습니다!

curl -X POST localhost:5555/predictions/model \
-H "Content-Type: application/json" \
-H "accept: application/json" \
-d '{"instances":[[3102, 15000, 17000, 22000, 30000, 2, 12000, 0.95, 5, 5, 22]]}'
1개의 좋아요