Azure Machine Learning 스튜디오를 사용하여 AI21의 Jamba 패밀리 모델을 배포하는 방법
Important
이 기능은 현재 공개 미리 보기로 제공됩니다. 이 미리 보기 버전은 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다.
자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
이 문서에서는 Azure Machine Learning 스튜디오를 사용하여 AI21의 Jamba 제품군 모델을 종량제 청구를 통해 서버리스 API로 배포하는 방법을 알아봅니다.
Jamba 제품군 모델은 AI21의 하이브리드 Mamba-Transformer 아키텍처를 활용하는 AI21의 프로덕션 등급 Mamba 기반 LLM(대규모 언어 모델)입니다. AI21의 하이브리드 SSM(구조화 상태 공간 모델) 변환기 Jamba 모델의 명령 조정 버전입니다. Jamba 제품군 모델은 품질 및 성능과 관련하여 안정적인 상업적 사용을 위해 제작되었습니다.
팁
AI21의 블로그 및 Microsoft Tech Community 블로그를 통해 Azure AI 모델 카탈로그에서 현재 사용할 수 있는 AI21의 Jamba 제품군 모델에 대한 공지 사항을 확인하세요.
Jamba 제품군 모델을 서버리스 API로 배포
모델 카탈로그의 특정 모델은 종량제 청구를 통해 서버리스 API로 배포할 수 있으므로 구독에서 호스트하지 않고 API로 사용하는 방법을 제공하면서 조직에 필요한 엔터프라이즈 보안 및 규정 준수를 유지할 수 있습니다. 이 배포 옵션에는 구독으로부터의 할당량이 필요하지 않습니다.
종량제 청구를 사용하여 서버리스 API로 배포된 AI21-Jamba 1.5 대형 모델은 Microsoft Azure Marketplace를 통해 AI21에서 제공됩니다. AI21은 이 모델의 사용 약관 및 가격 책정을 변경하거나 업데이트할 수 있습니다.
서버리스 API로 배포된 Jamba 1.5 대형을 시작하려면 LangChain, LiteLLM, OpenAI 및 Azure API와의 통합을 살펴보세요.
필수 조건
유효한 결제 방법을 사용하는 Azure 구독입니다. 무료 또는 평가판 Azure 구독은 작동하지 않습니다. Azure 구독이 없으면 유료 Azure 계정을 만들어 시작합니다.
Azure Machine Learning 작업 영역 및 컴퓨팅 인스턴스. 이러한 리소스가 없으면 빠른 시작: 작업 영역 리소스 만들기 문서의 단계에서 리소스를 만듭니다. Jamba 모델 제품군에 대한 서버리스 API 모델 배포 제품은 다음 지역에서 만들어진 작업 영역에서만 사용할 수 있습니다.
- 미국 동부
- 미국 동부 2
- 미국 중북부
- 미국 중남부
- 미국 서부
- 미국 서부 3
- 스웨덴 중부
서버리스 API 엔드포인트 배포를 지원하는 각 모델에 사용할 수 있는 지역 목록은 서버리스 API 엔드포인트의 모델에 대한 지역 가용성을 참조하세요.
Azure RBAC(Azure 역할 기반 액세스 제어)는 Azure Machine Learning의 작업에 대한 액세스 권한을 부여하는 데 사용됩니다. 이 문서의 단계를 수행하려면 사용자 계정에 Azure 구독에 대한 소유자 또는 기여자 역할이 할당되어야 합니다. 또는 계정에 다음 권한이 있는 사용자 지정 역할을 할당할 수 있습니다.
Azure 구독에서 작업 영역을 Azure Marketplace 제품에 등록하려면(각 작업 영역에 대해 제품별로 한 번씩) 다음을 수행합니다.
Microsoft.MarketplaceOrdering/agreements/offers/plans/read
Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
Microsoft.SaaS/register/action
리소스 그룹에서 SaaS 리소스를 만들고 사용하려면 다음을 수행합니다.
Microsoft.SaaS/resources/read
Microsoft.SaaS/resources/write
작업 영역에서 엔드포인트를 배포하려면 다음을 수행합니다(Azure Machine Learning 데이터 과학자 역할에는 이미 이러한 권한이 포함되어 있음).
Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*
권한에 대한 자세한 내용은 Azure Machine Learning 작업 영역 액세스 관리를 참조하세요.
새 배포 만들기
이러한 단계에서는 AI21 Jamba 1.5 Large
또는 AI21 Jamba 1.5 Mini
모델의 배포를 보여 줍니다. 배포를 만들려면 다음을 수행합니다.
Azure Machine Learning 스튜디오로 이동합니다.
모델을 배포할 작업 영역을 선택합니다. Serverless API 모델 배포 제품을 사용하려면 작업 영역이 필수 구성 요소에 나열된 지원 지역 중 하나에 속해야 합니다.
모델 카탈로그에서
AI21 Jamba 1.5 Large
,AI21 Jamba 1.5 Mini
또는AI21 Jamba Instruct
와 같은 AI21 모델을 검색하여 선택합니다.또는 작업 영역으로 이동하고 엔드포인트>서버리스 엔드포인트>만들기를 선택하여 배포를 시작할 수 있습니다.
모델 카탈로그의 모델 개요 페이지에서 배포를 선택한 다음 Azure AI 콘텐츠 보안이 포함된 서버리스 API를 선택합니다.
배포 마법사에서 Azure Marketplace 사용 약관에 대한 링크를 선택하여 사용 약관에 대해 자세히 알아봅니다.
Marketplace 제품 세부 정보 탭을 선택하여 선택한 모델의 가격 책정에 대해 알아볼 수도 있습니다.
작업 영역에 모델을 처음 배포하는 경우 Azure Marketplace에서 특정 제품에 대한 작업 영역을 구독해야 합니다. 이 단계를 수행하려면 계정에 필수 구성 요소에 나열된 Azure 구독 권한 및 리소스 그룹 권한이 있어야 합니다. 각 작업 영역에는 지출을 제어하고 모니터링할 수 있는 특정 Azure Marketplace 제품에 대한 자체 구독이 있습니다. 구독 및 배포를 선택합니다. 현재 작업 영역 내의 각 모델에 대해 하나의 배포만 가질 수 있습니다.
특정 Azure Marketplace 제품에 대한 작업 영역을 등록한 후에는 ‘동일한’ 작업 영역에서 ‘동일한’ 제품의 후속 배포 를 다시 구독할 필요가 없습니다. 따라서 후속 배포에 대한 구독 수준 권한이 필요하지 않습니다. 이 시나리오가 적용되는 경우 계속 배포를 선택합니다.
배포에 이름을 지정합니다. 이 이름은 배포 API URL의 일부가 됩니다. 이 URL은 각 Azure 지역에서 고유해야 합니다.
배포를 선택합니다. 배포가 완료되고 서버리스 엔드포인트 페이지로 리디렉션될 때까지 기다립니다.
엔드포인트를 선택하여 세부 정보 페이지를 엽니다.
테스트 탭을 선택하여 모델과의 상호 작용을 시작합니다.
배포를 호출하고 완료를 생성하기 위해 대상 URL 및 비밀 키를 적어둘 수도 있습니다.
작업 영역>엔드포인트>서버리스 엔드포인트로 이동하여 항상 엔드포인트의 세부 정보, URL 및 액세스 키를 찾을 수 있습니다.
종량제 토큰 기반 청구를 사용하여 서버리스 API로 배포된 AI21-Jamba 제품군 모델에 대한 청구에 대해 알아보려면 서버리스 API로 배포된 Jamba Instruct에 대한 비용 및 할당량 고려 사항을 참조하세요.
서버리스 API로 Jamba 제품군 모델 사용
다음과 같이 Jamba 제품군 모델을 사용할 수 있습니다.
- 작업 영역에서 엔드포인트>서버리스 엔드포인트를 선택합니다.
- 만든 배포를 찾아 선택합니다.
- 대상 URL 및 키 토큰 값을 복사합니다.
- 경로
/chat/completions
의 Azure AI 모델 유추 API 또는/v1/chat/completions
의 AI21의 Azure Client 중 하나를 사용하여 API 요청을 만듭니다.
API 사용에 대한 자세한 내용은 참조 섹션을 참조하세요.
서버리스 API로 배포된 Jamba 제품군 모델에 대한 참조
Jamba 제품군 모델은 다음 API를 모두 허용합니다.
- 멀티 턴 채팅 또는 단일 턴 질문 답변을 위한
/chat/completions
경로의 Azure AI 모델 유추 API [Azure AI 모델 유추 API]. Jamba 제품군 모델은 채팅 완료를 위해 미세 조정되므로 이 API가 지원됩니다. - AI21의 Azure 클라이언트. 호출되는 REST 엔드포인트에 대한 자세한 내용은 AI21의 REST 설명서을(를) 참조하세요.
Azure AI 모델 유추 API
Azure AI 모델 유추 API 스키마는 채팅 완료 참조 문서에서 찾을 수 있으며 OpenAPI 사양은 엔드포인트 자체에서 가져올 수 있습니다.
단일 턴 및 멀티 턴 채팅은 요청 및 응답 형식이 동일합니다. 단, 질문 답변(단일 턴)에는 요청에 단일 사용자 메시지만 포함되는 반면 멀티 턴 채팅에는 각 요청에서 전체 채팅 메시지 기록을 보내야 합니다.
멀티 턴 채팅에서 메시지 스레드에는 다음과 같은 특성이 있습니다.
- 사용자와 모델의 모든 메시지를 가장 오래된 것부터 최신 것 순으로 포함합니다.
user
및assistant
역할 메시지 간의 메시지 대체어- 선택적으로 메시지 스레드는 컨텍스트를 제공하기 위해 시스템 메시지로 시작됩니다.
다음 의사 코드는 초기 시스템 메시지가 포함된 채팅 요청의 네 번째 호출에 대한 메시지 스택의 예입니다.
[
{"role": "system", "message": "Some contextual information here"},
{"role": "user", "message": "User message 1"},
{"role": "assistant", "message": "System response 1"},
{"role": "user", "message": "User message 2"},
{"role": "assistant"; "message": "System response 2"},
{"role": "user", "message": "User message 3"},
{"role": "assistant", "message": "System response 3"},
{"role": "user", "message": "User message 4"}
]
AI21의 Azure 클라이언트
메서드 POST
를 사용하여 요청을 /v1/chat/completions
경로로 보냅니다.
요청
POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json
요청 스키마
페이로드는 다음 매개 변수를 포함하는 JSON 형식 문자열입니다.
키 | Type | 필수/기본값 | 허용된 값 | 설명 |
---|---|---|---|---|
model |
string |
Y | jamba-instruct 또는 AI21 Jamba 1.5 Large 또는 AI21 Jamba 1.5 Mini |
|
messages |
list[object] |
Y | 가장 오래된 것부터 최신 것 순으로 메시지당 하나씩 포함된 개체 목록입니다. 가장 오래된 메시지는 역할 system 일 수 있습니다. 이후의 모든 메시지는 사용자 역할과 도우미 역할을 번갈아 수행해야 합니다. 아래 메시지 개체 정의를 참조하세요. |
|
max_tokens |
integer |
N 4096 |
0 ~ 4096 | 생성된 각 응답 메시지에 허용되는 최대 토큰 수입니다. 일반적으로 출력 길이를 제한하는 가장 좋은 방법은 시스템 프롬프트에 길이 제한을 제공하는 것입니다(예: "답변을 세 문장으로 제한합니다") |
temperature |
float |
N 1 |
0.0 ~ 2.0 | 각 답변에 제공할 변형의 정도입니다. 이 값을 0으로 설정하면 매번 동일한 질문에 대해 동일한 응답이 보장됩니다. 더 높은 값을 설정하면 더 많은 변형이 가능해집니다. 토큰이 샘플링되는 배포를 수정합니다. 이를 변경하거나 top_p 를 변경하는 것이 좋지만 둘 다 변경하는 것은 바람직하지 않습니다. |
top_p |
float |
N 1 |
0 <값<=1.0 | 각 단계의 다음 토큰 풀을 가능한 토큰의 상위 N 백분위수로 제한합니다. 여기서 1.0은 가능한 모든 토큰의 풀을 의미하고 0.01은 가장 가능성이 높은 다음 토큰의 풀만을 의미합니다. |
stop |
string 또는 list[string] |
N |
"" | API가 출력 생성을 중지해야 하는 단어가 포함된 문자열 또는 문자열 목록입니다. 줄 바꿈 문자는 "\n"으로 허용됩니다. 반환된 텍스트에는 중지 시퀀스가 포함되지 않습니다. |
n |
integer |
N 1 |
1 ~ 16 | 각 프롬프트에 대해 생성할 응답 수입니다. Azure AI 스튜디오의 플레이그라운드를 사용하여 n=1 다중 응답 플레이그라운드를 작업합니다. |
stream |
boolean |
N False |
True 또는 False |
스트리밍 사용 여부. true인 경우 결과는 한 번에 하나의 토큰으로 반환됩니다. true로 설정한 경우 n 은(는) 1이어야 하며 자동으로 설정됩니다. |
messages
개체에는 다음 필드가 있습니다.
role
: [문자열, 필수] 메시지의 작성자 또는 목적입니다. 다음 값 중 하나입니다.user
: 사용자가 제공한 입력입니다. 여기에 제공된 지침 중system
프롬프트에 제공된 지침과 충돌하는 모든 지침은system
프롬프트 지침보다 우선합니다.assistant
: 모델이 생성한 응답입니다.system
: 생성된 메시지의 톤과 음성에 대한 일반적인 지침을 제공하는 초기 지침입니다. 초기 시스템 메시지는 선택 사항이지만 채팅 분위기에 대한 지침을 제공하는 것이 좋습니다. 예를 들어, "당신은 지구 과학에 대한 배경 지식과 매력적인 프랑스어 악센트를 사용하는 유용한 챗봇입니다."
content
: [문자열, 필수] 메시지 콘텐츠입니다.
요청 예시
단일 턴 예
{
"model": "jamba-instruct",
"messages": [
{
"role":"user",
"content":"Who was the first emperor of rome?"}
],
"temperature": 0.8,
"max_tokens": 512
}
채팅 예(세 번째 사용자 응답을 포함하는 네 번째 요청)
{
"model": "jamba-instruct",
"messages": [
{"role": "system",
"content": "You are a helpful genie just released from a bottle. You start the conversation with 'Thank you for freeing me! I grant you one wish.'"},
{"role":"user",
"content":"I want a new car"},
{"role":"assistant",
"content":"🚗 Great choice, I can definitely help you with that! Before I grant your wish, can you tell me what kind of car you're looking for?"},
{"role":"user",
"content":"A corvette"},
{"role":"assistant",
"content":"Great choice! What color and year?"},
{"role":"user",
"content":"1963 black split window Corvette"}
],
"n":3
}
응답 스키마
응답은 결과가 스트리밍되는지 여부에 따라 약간 다릅니다.
스트리밍되지 않은 결과에서는 모든 응답이 단일 응답으로 함께 배달되며 여기에는 usage
속성도 포함됩니다.
스트리밍된 결과의
- 각 응답에는
choices
필드에 단일 토큰이 포함됩니다. choices
개체 구조가 다릅니다.- 마지막 응답에만
usage
개체가 포함됩니다. - 전체 응답은
data
개체에 래핑됩니다. - 최종 응답 개체는
data: [DONE]
입니다.
응답 페이로드는 다음 필드가 있는 사전입니다.
키 | 형식 | 설명 |
---|---|---|
id |
string |
요청의 고유 식별자 |
model |
string |
사용된 모델의 이름. |
choices |
list[object ] |
모델 생성 응답 텍스트. 비스트리밍 응답의 경우 n 개 항목이 포함된 목록입니다. 스트리밍 응답의 경우 단일 토큰을 포함하는 단일 개체입니다. 아래 개체 설명을 참조하세요. |
created |
integer |
완료가 만들어진 시점의 Unix 타임스탬프(초)입니다. |
object |
string |
항상 chat.completion 인 개체 형식입니다. |
usage |
object |
완료 요청의 사용 통계입니다. 자세한 내용은 다음을 참조하세요. |
choices
응답 개체에는 모델 생성 응답이 포함되어 있습니다. 개체에는 다음 필드가 있습니다.
키 | 형식 | 설명 |
---|---|---|
index |
integer |
메시지 목록에 있는 메시지의 인덱스(0부터 시작)입니다. 목록의 위치와 일치하지 않을 수 있습니다. 스트리밍된 메시지의 경우 이는 항상 0입니다. |
message 또는 delta |
object |
생성된 메시지(또는 스트리밍 응답의 토큰)입니다. 두 가지 변경 내용이 있는 요청에 설명된 것과 동일한 개체 유형이 있습니다. - 비스트리밍 응답에서는 이 개체를 message 라고 합니다. - 스트리밍 응답에서는 delta 이라고 하며 message 또는 role 을(를) 포함하지만 둘 다 포함하지는 않습니다. |
finish_reason |
string |
모델이 토큰 생성을 중지한 이유는 다음과 같습니다. - stop : 모델이 자연 중지 지점 또는 제공된 중지 시퀀스에 도달했습니다. - length : 최대 토큰 수에 도달했습니다. - content_filter : 생성된 응답이 책임 있는 AI 정책을 위반했습니다. - null : 스트리밍 전용입니다. 스트리밍 응답에서 마지막 응답을 제외한 모든 응답은 null 입니다. |
usage
응답 개체에는 다음 필드가 포함되어 있습니다.
키 | Type | 값 |
---|---|---|
prompt_tokens |
integer |
프롬프트에 있는 토큰 수입니다. 프롬프트 토큰 수에는 모델에서 요구하는 대로 프롬프트 목록을 단일 문자열로 형식화하기 위해 시스템에서 추가한 추가 토큰이 포함됩니다. 추가 토큰의 수는 일반적으로 스레드의 메시지 수에 비례하며 상대적으로 작아야 합니다. |
completion_tokens |
integer |
완료에서 생성된 토큰 수입니다. |
total_tokens |
integer |
총 토큰입니다. |
비스트리밍 응답 예
{
"id":"cmpl-524c73beb8714d878e18c3b5abd09f2a",
"choices":[
{
"index":0,
"message":{
"role":"assistant",
"content":"The human nose can detect over 1 trillion different scents, making it one of the most sensitive smell organs in the animal kingdom."
},
"finishReason":"stop"
}
],
"created": 1717487036,
"usage":{
"promptTokens":116,
"completionTokens":30,
"totalTokens":146
}
}
스트리밍 응답 예
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"role": "assistant"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": ""}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " The"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": " first e"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "mpe"}, "created": 1717487336, "finish_reason": null}]}
... 115 responses omitted for sanity ...
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "me"}, "created": 1717487336, "finish_reason": null}]}
data: {"id": "cmpl-8e8b2f6556f94714b0cd5cfe3eeb45fc", "choices": [{"index": 0, "delta": {"content": "."}, "created": 1717487336,"finish_reason": "stop"}], "usage": {"prompt_tokens": 107, "completion_tokens": 121, "total_tokens": 228}}
data: [DONE]
비용 및 할당량
서버리스 API로 배포된 Jamba 제품군 모델에 대한 비용 및 할당량 고려 사항
Jamba 제품군 모델은 서버리스 API로 배포되며, AZURE Marketplace를 통해 AI21에서 제공되며 사용할 Azure AI 스튜디오와 통합됩니다. 모델을 배포하거나 미세 조정하는 경우 Azure Marketplace 가격 책정을 찾을 수 있습니다.
작업 영역이 Azure Marketplace에서 지정된 모델 제품을 구독할 때마다 사용에 연결된 비용을 추적하기 위해 새 리소스가 만들어집니다. 유추 및 미세 조정과 관련된 비용을 추적하는 데는 동일한 리소스가 사용되지만 여러 미터를 사용하여 각 시나리오를 독립적으로 추적할 수 있습니다.
비용을 추적하는 방법에 대한 자세한 내용은 Azure Marketplace를 통해 제공되는 모델에 대한 비용 모니터링을 참조하세요.
할당량은 배포당 관리됩니다. 각 배포에는 분당 200,000개의 토큰과 분당 1,000개의 API 요청의 속도 제한이 있습니다. 그러나 현재는 프로젝트별 모델당 하나의 배포로 제한됩니다. 현재 속도 제한이 시나리오에 충분하지 않은 경우 Microsoft Azure 지원에 문의하세요.
콘텐츠 필터링
서버리스 API로 배포된 모델은 Azure AI 콘텐츠 보안으로 보호됩니다. Azure AI 콘텐츠 보안을 사용하도록 설정한 경우 유해한 콘텐츠의 출력을 탐지하고 방지하기 위한 분류 모델의 앙상블을 통해 프롬프트와 완료가 모두 실행됩니다. 콘텐츠 필터링(미리 보기) 시스템은 입력 프롬프트와 출력 완성 모두에서 잠재적으로 유해한 콘텐츠의 특정 범주를 검색하고 조치를 취합니다. Azure AI 콘텐츠 보안에 대해 자세히 알아보기.