Azure OpenAI에서 gpt-4o 모델 배포 및 API 사용하기(chat,vision)
Today Keys : gpt-4o, api, model, chat, completion, vision, multi, modal, omni, chatgpt
이번 주에 진행된 Microsoft의 연례 개발자 대상의 컨퍼런스인 Build가 시작하면서, gpt-4o 모델에 대한 API를 Azure OpenAI에서 사용 할 수 있도록 GA 되었습니다.
이번 포스팅에서는 Azure OpenAI를 사용하여 gpt-4o 모델을 배포하고, 배포된 gpt-4o 모델을 API를 통해서 Chat과 Vision에 대한 사용을 해봅니다.
Azure OpenAI Studio에서 gpt-4o 배포를 위해 모델 메뉴로 들어갑니다.
모델 메뉴에 들어오면 해당 리전에서 사용 가능한 모델 리스트를 확인 할 수 있습니다.
gpt-4o 모델을 선택하고, 상단의 '배포' 메뉴를 클릭합니다.
GPT-4o (2024-05-13) 지원 리전 |
- eastus, eastus2, northcentralus, southcentralus, westus, westus3 |
배포 메뉴를 클릭하면 다음과 같이 '모델 배포' 창이 뜹니다.
모델 선택에는 gpt-4o가 지정된 것을 볼 수 있고,
모델 버전을 선택하는 데, 기본 값인 자동 업데이트 옵션을 사용하셔도 됩니다.
배포 유형은 표준과 글로벌 표준이 있는 데, 표준으로 선택합니다.
배포된 모델을 사용 할 때 쓰는 배포 이름을 지정하는 데, 모델명과 동일하게 gpt-4o로 하겠습니다.
하단의 '만들기'를 버튼을 클릭하면 모델이 배포되며,
잠시 후 바로 모델 사용이 가능합니다.
참고! 모델 배포 시에 선택 가능했던 배포 유형이었던 표준과 글로벌 표준의 특징은 다음과 같습니다. GPT-4o 배포 유형 - Standard 선택한 모델에 대한 Pay-per-call 방식의 과금 모델 각 Region별로 사용 가능한 모델과 처리량이 제한 됨. (low rate limits) 트래픽이 지역 내로 라우팅되어서, Data residency가 준수 됨. 비용도 각 Region별 가격 정책으로 적용 - Global-Standard 선택한 모델에 대한 Pay-per-call 방식의 과금 모델 트래픽이 전 세계로 라우팅되어서, Data residency이 준수 되지 않음. 비용은 기본 요금 체계 사용 최신 모델에 대한 접근이 빠르고, 높은 수준의 처리량 제공(High rate limits) Data residency가 필요하지 않은 일반 사용자에게 적합 |
이제 배포된 gpt-4o 모델을 API를 이용해서 사용해 보겠습니다.
Chat Completion
chat.completion을 사용하기 위한 간단한 함수를 정의하였습니다.
model은 gpt-4o로 지정했습니다.
system prompt도 단순하게 gpt가 유용한 Assistant 역할만 하도록 하였고,
사용자의 질의를 query로 받아서 답변을 하는 내용입니다.
import os
from openai import AzureOpenAI
import time
client = AzureOpenAI(
azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
api_key=os.getenv("AZURE_OPENAI_API_KEY"),
api_version=os.getenv("AZURE_OPENAI_API_VERSION")
)
def zigi_chat(query):
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": query},
]
)
return response.choices[0].message.content
Microsoft의 AI 전략에 대해서 gpt-4o에게 질의를 하고,
답변까지 얼마나 걸리는지 시간을 확인해보았습니다.
답변까지 약 7.61초가 소요된 것을 확인 할 수 있습니다.
gpt-4o의 속도를 비교해보기 위해서,
gpt-3.5와 gpt-4에 대해서 동일한 질의를 해봅니다.
먼저 gpt-3.5 입니다.
답변의 품질은 제외하고, 답변 양에서는 조금 차이가 있고 답변까지 6.82초 정도 소요되었습니다.
다음은 gpt-4 입니다.
gpt-4의 경우 답변까지 약 42.77초가 소요되었습니다.
몇 번의 테스트를 더 수행해보니,
gpt-4o는 gpt-3.5와 유사한 속도의 성능을 보이고 있고,
gpt-4는 상대적으로 속도 측면에서는 느렸습니다.
(참고로, 제 테스트 시에는 3배에서 최대 10배까지도 차이가 났습니다.)
답변 품질의 경우에는 gpt-4o는 gpt-4와 유사한 수준을 보이고 있어서,
속도적인 측면이나, 품질의 측면에서 볼 때 gpt-4o가 우위인 것을 알 수 있었습니다.
Vision
다음은 gpt-4o에서 지원되는 Vision 기능을 확인해 보겠습니다.
gpt-4o로 다음 뉴스 이미지에 대한 설명을 요청해봅니다.
이미지 URL을 주고, gpt-4o에게 설명해주도록 요청합니다.
이미지 분석을 위해서, messages의 content에 'image_url' type을 추가하여
gpt-4o가 분석 할 이미지의 URL 주소를 넣어줍니다.
약 7초 후에 이미지에 대한 설명을 확인 할 수 있습니다.
gpt-4o가 이미지에 대해서 설명한 내용을 보면, 상/하단의 자막과 배경의 이미지에 대해서 비교적 잘 설명하고 있는 것을 볼 수 있습니다.
이번에는 인터넷 상의 이미지가 아닌 로컬에 있는 이미지에 대한 내용을 gpt-4o에게 물어보겠습니다.
사용한 이미지는 다음과 같습니다.
로컬 이미지를 사용하기 위해서 아래의 Python 코드를 사용하여 이를 base64로 변환하여 API에 전달합니다.
def local_image_to_data_url(image_path):
mime_type, _ = guess_type(image_path)
if mime_type is None:
mime_type = 'application/octet-stream'
with open(image_path, "rb") as image_file:
base64_encoded_data = base64.b64encode(image_file.read()).decode('utf-8')
return f"data:{mime_type};base64,{base64_encoded_data}"
그리고, query와 Base64로 변환된 이미지 경로로 gpt-4o의 답변을 받을 수 있도록 chat.completion을 다음과 같은 함수로 작성합니다.
def desc_img(query, img_url):
response = client.chat.completions.create(
model="gpt-4o",
messages=[
{
"role": "user",
"content": [
{
"type": "text",
"text": query
},
{
"type": "image_url",
"image_url":
{
"url": img_url,
},
},
],
}
],
max_tokens=300,
)
return response
이제 앞선 이미지에 있는 내용에 대해서 아래와 같이 질의해 보겠습니다.
"지역 여행 상품의 이용 기간과 쿠폰 할인율은 얼마야?"
답변 내용을 살펴보면, 이용 기간 및 할인율에 대해서
이미지에 포함된 내용으로 적절한 답변을 한 것을 확인 할 수 있습니다.
마지막으로, 다른 이미지에 대한 질문을 한 가지만 더 해보겠습니다.
이번에 사용할 이미지는 아래와 같습니다.
한국 관광 공사에서 진행하는 6월의 여행 가는 달 혜택과 관련된 이미지입니다.
이번에는 위 이미지의 여행 혜택에 대해서 아래와 같이 질문합니다.
"6월 여행 혜택에 대해서 알려줘"
이미지를 확인하고 답변까지 약 5초 정도가 소요되었습니다.
답변 내용을 보면, 제공한 이미지에 포함된 내용을 충실하게 포함한 답변을 한 것을 볼 수 있습니다.
동일 이미지에 대해서 몇 번의 유사한 테스트를 했을 때,
100% 정확한 답변을 하지는 않긴 했지만, 대체적으로 질의에 대해서 이미지에 대한 설명이 만족스러운 수준이었습니다.
개인적으로는 무엇보다 gpt 4의 성능과 gpt 3.5의 응답 속도 측면에 제일 만족스러웠고,
기존 Vision보다 한국어 인식 능력이 더 좋아졌다고 하여, 좀 더 다양한 활용을 할 수 있을 것 같습니다.
참고 Link
GPT-4 Turbo with Vision 모델을 사용하는 방법 - Azure OpenAI Service | Microsoft Learn
빠른 시작: Azure OpenAI 서비스를 사용하여 이미지와 비디오에 GPT-4 Turbo with Vision 사용 - Azure OpenAI | Microsoft Learn