AI 도구 키트의 기본 사이드바는 모델 및 리소스로 구성됩니다.플레이그라운드 및 미세 조정 기능은 리소스 섹션에서 사용할 수 있습니다. 시작하려면 모델 카탈로그를 선택합니다.
팁
모델 카드에는 모델 크기, 플랫폼 및 가속기 유형(CPU, GPU)이 표시됩니다. GPU가 하나 이상 있는 Windows 디바이스에서 최적화된 성능을 위해 Windows만 대상으로 하는 모델 버전을 선택합니다. 이렇게 하면 DirectML 가속기용으로 최적화된 모델이 있습니다. 모델 이름은 .의 {model_name}-{accelerator}-{quantization}-{format}형식입니다.
Windows 디바이스에 GPU가 있는지 확인하려면 작업 관리자를 열고 성능 탭을 선택합니다. GPU가 있는 경우 "GPU 0" 또는 "GPU 1"와 같은 이름 아래에 나열됩니다.
Phi3-mini(int4) 모델의 크기는 약 2GB-3GB입니다. 네트워크 속도에 따라 다운로드하는 데 몇 분 정도 걸릴 수 있습니다.
놀이터에서 모델 실행
모델이 다운로드되면 카탈로그의 모델 카드에서 플레이그라운드에 로드를 선택합니다.
플레이그라운드의 채팅 인터페이스에서 다음 메시지와 Enter 키를 입력합니다.
모델 응답이 사용자에게 다시 스트리밍되는 것을 볼 수 있습니다.
Warning
디바이스에서 사용할 수 있는 GPU가 없지만 Phi-3-mini-4k-directml-int4-awq-block-128-onnx 모델을 선택한 경우 모델 응답이 매우 느려집니다. 대신 CPU 최적화 버전인 Phi-3-mini-4k-cpu-int4-rtn-block-32-acc-level-4-onnx를 다운로드해야 합니다.
다음을 변경할 수도 있습니다.
컨텍스트 지침: 모델이 요청의 더 큰 그림을 이해하는 데 도움이 됩니다. 이는 백그라운드 정보, 원하는 항목의 예제/데모 또는 작업의 목적을 설명하는 것일 수 있습니다.
유추 매개 변수:
최대 응답 길이: 모델이 반환할 최대 토큰 수입니다.
온도: 모델 온도는 언어 모델의 출력을 임의로 제어하는 매개 변수입니다. 온도가 높을수록 모델이 더 많은 위험을 감수하여 다양한 단어를 혼합할 수 있습니다. 반면, 온도가 낮을수록 모델이 안전하게 재생되고 더 집중적이고 예측 가능한 응답을 고수할 수 있습니다.
상위 P: 핵 샘플링이라고도 하며, 다음 단어를 예측할 때 언어 모델에서 고려할 수 있는 단어 또는 구의 수를 제어하는 설정입니다.
빈도 페널티: 이 매개 변수는 모델이 출력에서 단어 또는 구를 반복하는 빈도에 영향을 줍니다. 값이 높을수록(1.0에 가까울수록) 모델이 단어나 구를 반복하지 않도록 합니다.
프레즌스 페널티: 이 매개 변수는 생성된 텍스트의 다양성과 특이성을 장려하기 위해 생성 AI 모델에 사용됩니다. 값이 1.0에 가까울수록 모델에 더 많은 신규 및 다양한 토큰이 포함되도록 할 수 있습니다. 값이 낮을수록 모델이 공통 또는 진부한 구를 생성할 가능성이 높습니다.
애플리케이션에 AI 모델 통합
애플리케이션에 모델을 통합하는 두 가지 옵션이 있습니다.
AI 도구 키트는 OpenAI 채팅 완료 형식을 사용하는 로컬 REST API 웹 서버와 함께 제공됩니다. 이렇게 하면 클라우드 AI 모델 서비스에 의존하지 않고도 엔드포인트 http://127.0.0.1:5272/v1/chat/completions 를 사용하여 애플리케이션을 로컬로 테스트할 수 있습니다. 프로덕션 환경에서 클라우드 엔드포인트로 전환하려는 경우 이 옵션을 사용합니다. OpenAI 클라이언트 라이브러리를 사용하여 웹 서버에 연결할 수 있습니다.
ONNX 런타임 사용. 디바이스에서 추론을 사용하여 애플리케이션과 함께 모델을 제공하려는 경우 이 옵션을 사용합니다.
로컬 REST API 웹 서버
로컬 REST API 웹 서버를 사용하면 클라우드 AI 모델 서비스에 의존하지 않고도 애플리케이션을 로컬로 빌드 및 테스트할 수 있습니다. 또는 OpenAI 클라이언트 라이브러리를 사용하여 REST웹 서버와 상호 작용할 수 있습니다.
curl -vX POST http://127.0.0.1:5272/v1/chat/completions -H 'Content-Type: application/json' -d @body.json
OpenAI Python 라이브러리를 설치합니다.
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="http://127.0.0.1:5272/v1/",
api_key="x" # required by API but not used
)
chat_completion = client.chat.completions.create(
messages=[
{
"role": "user",
"content": "what is the golden ratio?",
}
],
model="Phi-3-mini-4k-directml-int4-awq-block-128-onnx",
)
print(chat_completion.choices[0].message.content)
OverridePolicy.cs라는 C# 파일을 프로젝트에 추가하고 다음 코드를 붙여넣습니다.
// OverridePolicy.cs
using Azure.Core.Pipeline;
using Azure.Core;
internal partial class OverrideRequestUriPolicy(Uri overrideUri)
: HttpPipelineSynchronousPolicy
{
private readonly Uri _overrideUri = overrideUri;
public override void OnSendingRequest(HttpMessage message)
{
message.Request.Uri.Reset(_overrideUri);
}
}
다음으로 다음 코드를 Program.cs 파일에 붙여넣습니다.
// Program.cs
using Azure.AI.OpenAI;
Uri localhostUri = new("http://localhost:5272/v1/chat/completions");
OpenAIClientOptions clientOptions = new();
clientOptions.AddPolicy(
new OverrideRequestUriPolicy(localhostUri),
Azure.Core.HttpPipelinePosition.BeforeTransport);
OpenAIClient client = new(openAIApiKey: "unused", clientOptions);
ChatCompletionsOptions options = new()
{
DeploymentName = "Phi-3-mini-4k-directml-int4-awq-block-128-onnx",
Messages =
{
new ChatRequestSystemMessage("You are a helpful assistant. Be brief and succinct."),
new ChatRequestUserMessage("What is the golden ratio?"),
}
};
StreamingResponse<StreamingChatCompletionsUpdate> streamingChatResponse
= await client.GetChatCompletionsStreamingAsync(options);
await foreach (StreamingChatCompletionsUpdate chatChunk in streamingChatResponse)
{
Console.Write(chatChunk.ContentUpdate);
}
참고 항목
Phi3 모델의 CPU 버전을 다운로드한 경우 모델 필드를 Phi-3-mini-4k-cpu-int4-rtn-block-32-acc-level-4-onnx로 업데이트해야 합니다.
ONNX Runtime
ONNX 런타임 생성 API는 ONNX 런타임 유추, 로그 처리, 검색 및 샘플링 및 KV 캐시 관리를 포함하여 ONNX 모델에 대한 생성 AI 루프를 제공합니다. 상위 수준 generate() 메서드를 호출하거나 루프에서 모델의 각 반복을 실행하여 한 번에 하나의 토큰을 생성하고 필요에 따라 루프 내에서 생성 매개 변수를 업데이트할 수 있습니다.
greedy/beam 검색 및 TopP, 토큰 시퀀스를 생성하는 TopK 샘플링 및 반복 페널티와 같은 기본 제공 로그 처리를 지원합니다. 다음 코드는 애플리케이션에서 ONNX 런타임을 활용하는 방법의 예입니다.
venv 또는 conda를 사용하여 가상 환경에 Python 패키지를 설치하는 것이 좋습니다.
다음으로, 다음 코드를 복사하여 app.py Python 파일에 붙여넣습니다.
# app.py
import onnxruntime_genai as og
import argparse
def main(args):
print("Loading model...")
model = og.Model(f'{args.model}')
print("Model loaded")
tokenizer = og.Tokenizer(model)
tokenizer_stream = tokenizer.create_stream()
search_options = {
'max_length': 2048
}
chat_template = '<|user|>\n{input} <|end|>\n<|assistant|>'
# Keep asking for input prompts in a loop
while True:
text = input("Input: ")
# If there is a chat template, use it
prompt = f'{chat_template.format(input=text)}'
input_tokens = tokenizer.encode(prompt)
params = og.GeneratorParams(model)
params.set_search_options(**search_options)
params.input_ids = input_tokens
generator = og.Generator(model, params)
print("\nOutput: ", end='', flush=True)
while not generator.is_done():
generator.compute_logits()
generator.generate_next_token()
new_token = generator.get_next_tokens()[0]
print(tokenizer_stream.decode(new_token), end='', flush=True)
print()
print()
# Delete the generator to free the captured graph for the next generator, if graph capture is enabled
del generator
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument('-m', '--model', type=str, required=True, help='Onnx model folder path (must contain config.json and model.onnx)')
args = parser.parse_args()
main(args)
AI 도구 키트는 모델 다운로드를 사용자 디렉터리에 있는 .aitk 숨겨진 폴더로 캐시합니다. 매개 변수에 --model 사용되는 경로를 ONNX 모델 파일이 포함된 폴더의 위치로 업데이트해야 합니다. 예: ~/.aitk/models/microsoft/Phi-3-mini-4k-instruct-onnx/directml/Phi-3-mini-4k-directml-int4-awq-block-128-onnx/
플랫폼 및 GPU 가용성에 따라 ONNX 런타임 NuGet 패키지를 프로젝트에 설치합니다.
using Microsoft.ML.OnnxRuntimeGenAI;
// update user_name and path placeholders
string modelPath = "C:\\Users\\{user_name}\\.aitk\\models\\{path}";
Console.Write("Loading model from " + modelPath + "...");
using Model model = new(modelPath);
Console.Write("Done\n");
using Tokenizer tokenizer = new(model);
using TokenizerStream tokenizerStream = tokenizer.CreateStream();
while (true)
{
Console.Write("User:");
string? input = Console.ReadLine();
string prompt = "<|user|>\n" + input + "<|end|>\n<|assistant|>";
var sequences = tokenizer.Encode(prompt);
using GeneratorParams generatorParams = new GeneratorParams(model);
generatorParams.SetSearchOption("max_length", 200);
generatorParams.SetInputSequences(sequences);
Console.Out.Write("\nAI:");
using Generator generator = new(model, generatorParams);
while (!generator.IsDone())
{
generator.ComputeLogits();
generator.GenerateNextToken();
Console.Out.Write(tokenizerStream.Decode(generator.GetSequence(0)[^1]));
Console.Out.Flush();
}
Console.WriteLine();
}
참고 항목
AI 도구 키트는 모델 다운로드를 사용자 디렉터리에 있는 .aitk 숨겨진 폴더로 캐시합니다. 코드에서 ONNX 모델 파일이 포함된 폴더의 위치로 업데이트 modelPath 해야 합니다. 예: ~/.aitk/models/microsoft/Phi-3-mini-4k-instruct-onnx/directml/Phi-3-mini-4k-directml-int4-awq-block-128-onnx/