본문 바로가기

Cloud/AZURE

Azure OpenAI 성능 및 대기 시간

시스템 수준 처리량(System level throughput)

 Model의 Deployment의 전체 용량(분당 요청 수, 처리 할 수 있는 총 토큰)

표준 배포(Standard Deployment)

   - Deployment에 할당된 할당량(quota)이 처리량에 부분적으로 영향

  - 단, 실제 할당량은 Deploy에 대한 호출 승인 로직만 결정하고, 처리량에 대해서 강제하지는 않음. 

  - 호출에 대한 지연으로 할당량만큼의 높은 처리량이 불가 할 수도 있음.  

  ※ 할당량은 TPM(Token Per Minute) 단위로 지역 별, 모델 별로 구독에 할당 됨. 

       TPM 내에서 Deployment를 1개로 운영하거나, TPM을 나눠서 2개 이상 운용 가능 

Model에 대한 할당

 

Deployment의  TPM 설정 화면

 

Provisioned Deployment

  - 설정된 양의 모델 처리 용량이 Endpoint에 할당 됨. 

  - Endpoiunt에서 달성 가능한 처리량은 입력크기, 출력크기, 호출 비율, 캐시 일치율에 영향

 - 동시 호출 수와 처리 토큰 수는 이러한 값에 영향을 받게 됨.  

 

성능 향상을 위한 대기 시간 제어 요소

모델 (Model)

동일한 요청의 경우라도, Model에 따른 대기 시간이 달라집니다. 

아무래도 GPT-4의 경우에 일반적인 성능이 뛰어나지만, 대기 시간에서는 좋지 못합니다. 

따라서, 가장 빠르고, 지연 시간이 짧은 모델이 필요한 경우에는 GPT-3.5 Turbo 시리즈의 모델을 사용하는 것이 좋습니다.

 

생성 크기 및 최대 토큰

Azure Open AI로 보내는 요청은 Token으로 변환되어 Model에 전달되고,

입력 Token을 받은 Model은 응답을 생성하게 됩니다. 

응답 생성은 한 번에 하나의 Token을 반복적으로 생성하게 되는 데, 

이러한 응답 생성은 전체 과정에서 가장 시간이 오래 걸립니다. 

요청 시에, max_tokens 파라미터를 사용하면, 이는 초기 생성 크기 예측 값으로 사용되는 데, 

이 값을 이용해서, 출력 값의 제한을 두어서 Token 수를 줄이면 당연하게도 성능에 도움이 됩니다.

그리고, 추가 컨텐츠를 생성하지 않도록 중지 시퀀스를 포함하는 것도 불필요 Token을 예방 할 수 있습니다. 

또한, best_of나 n 매개 변수를 지정하지 않거나, 1로 설정해서 다양한 응답이 만들어져서, 

Token 수가 늘어나는 것을 예방 할 수 있습니다. 

 

스트리밍(Streaming)

전체 대기 시간의 변화는 없지만, 전체 시퀀스가 생성되지 않더라도 

바로 바로 응답 내용을 확인 할 수 있어서, 사용자의 대기 시간을 줄여줄 수 있습니다.

다만, 구현하는 서비스에 따라서 실시간 응답이 아닌 완료 결과만 받아보는 대량 작업에서는 의미가 없습니다.

 

컨텐츠 필터링(Contetn Filtering)

Azure OpenAI에는 Content Filtering 시스템을 포함하고 있느 ㄴ데, 

이러한 시스템은 유해 컨텐츠 출력을 예방 할 수 있는 장점이 있지만, 

대기 시간이 증가하게 되므로, 서비스에 따라서 적절하게 Content Filtering을 사용해야 합니다.

 

워크로드 분리(Separation of workloads)

동일 Endpoint에 다양한 워크로드가 혼합되어서 사용 하면, 대기 시간에 영향이 갈 수 있습니다.

예를 들어서, 추론 중인 워크로드와 함께 배치성 일괄 요청이 함께 동작하면 추론 대기 시간에 영향을 미칩니다.

따라서, 가능하다면 서로 다른 워크로드의 경우에는 Endpoint를 분리하는 것이 유리합니다.

 

프롬프트 크기(Prompt Size)

프롬프트 크기는 전체 프로세스의 가장 시간이 오래 걸리는 생성보다는 영향이 덜 미치기는 하지만, 

전체 크기가 커질 경우에는 서비스에 영향을 미칠 수 있으니 불 필요하게 프롬프트가 커지지 않도록 하는 것이 좋습니다.

 

일괄 처리(Batching)

동일 Endpoint에 다수 요청을 하는 것을 단일 호출(request)로 일괄 처리하는 것을 검토해 볼 수 있습니다.

필요한 요청 수를 줄여서, 시나리오 따라서 전체 응답 시간을 줄일 수 있습니다.

 

 

처리량(Throughput)을 측정하는 방법

다음 2가지 측정상으로 배포에 대한 전체 처리량을 측정하는 것이 좋습니다.

분당 호출 수(Calls per minute)

  - 분당 수행하는 API 추론(Inference) 호출 수

 

분당 총 토큰 수(Total Tokens per minute)

  - Deployment에서 분당 처리 되는 총 토큰 수

  - Prompt 및 생성 Token이 포함 됨. 

 

 

 

 

 

 

https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/latency?WT.mc_id=AZ-MVP-5002542

 

Azure OpenAI Service performance & latency - Azure OpenAI

Learn about performance and latency with Azure OpenAI

learn.microsoft.com