본문 바로가기

Cloud/AZURE

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

 

GPT-4 Turbo with Vision 모델을 사용하는 방법 - Azure OpenAI Service

GPT-4 Turbo with Vision을 사용하는 옵션에 대해 알아봅니다.

learn.microsoft.com

빠른 시작: Azure OpenAI 서비스를 사용하여 이미지와 비디오에 GPT-4 Turbo with Vision 사용 - Azure OpenAI | Microsoft Learn

 

빠른 시작: Azure OpenAI 서비스를 사용하여 이미지와 비디오에 GPT-4 Turbo with Vision 사용 - Azure OpenAI

이 문서를 통해 Azure OpenAI를 사용하여 GPT-4 Turbo with Vision 모델을 배포하고 사용하기 시작합니다.

learn.microsoft.com