AI 도구 키트(AI 도구 키트 VS Code )는 앱 또는 클라우드에서 AI 모델을 다운로드, 테스트, 미세 조정 및 배포할 수 있는 확장입니다 VS Code . 자세한 내용은 AI 도구 키트 개요를 참조하세요.
이 문서에서는 다음을 수행하는 방법을 알아봅니다.
- 에 대한 AI 도구 키트 설치 VS Code
- 카탈로그에서 모델 다운로드
- 플레이그라운드를 사용하여 로컬로 모델 실행
- ONNX 런타임을 사용하여 REST 애플리케이션에 AI 모델 통합
필수 조건
AI 기능을 활용할 때, Windows의 "책임 있는 생성 AI 애플리케이션 및 기능을 개발하는" 지침 을 검토할 것을 권장합니다.
설치
AI 도구 키트는 Visual Studio Marketplace에서 사용할 수 있으며 다른 VS Code 확장과 마찬가지로 설치할 수 있습니다. 확장 설치에 VS Code 익숙하지 않은 경우 다음 단계를 수행합니다.
- 활동 모음에서 VS Code 확장 선택
- 확장 검색 창에 "AI 도구 키트"를 입력합니다.
- "Visual Studio 코드용 AI 도구 키트"를 선택합니다.
-
설치를 선택합니다.
확장이 설치되면 활동 모음에 AI 도구 키트 아이콘이 표시됩니다.
카탈로그에서 모델 다운로드
AI 도구 키트의 기본 사이드바는 내 모델, 카탈로그, 도구, 및 도움말 및 피드백로 구성됩니다.
플레이그라운드, 대량 실행, 평가및 미세 조정 기능은 도구 섹션에서 사용할 수 있습니다. 시작하려면 카탈로그 섹션에서 모델 선택하여 모델 카탈로그 창을 엽니다.
AI 도구 키트 모델 카탈로그 창의 스크린샷
카탈로그 맨 위에 있는 필터를 사용하여 호스트된, Publisher, 작업및 모델 유형필터링할 수 있습니다. 또한 세밀하게 조정할 수 있는 모델만 표시하도록 전환할 수 있는 Fine-Tuning 지원 스위치도 있습니다.
팁
모델 유형 필터를 사용하면 CPU, GPU 또는 NPU에서 로컬로 실행되는 모델 또는 원격 액세스지원하는 모델만 표시할 수 있습니다. 하나 이상의 GPU 있는디바이스에서 최적화된 성능을 위해 GPU 로컬 실행의 모델 유형을 선택합니다. 이렇게 하면 DirectML 가속기용으로 최적화된 모델을 찾을 수 있습니다.
Windows 디바이스에 GPU가 있는지 확인하려면 작업 관리자를 열고 성능 탭을 선택합니다. GPU가 있는 경우 "GPU 0" 또는 "GPU 1"와 같은 이름 아래에 나열됩니다.
다음 모델은 현재 하나 이상의 GPU가 있는 Windows 디바이스에서 사용할 수 있습니다.
- Mistral 7B(DirectML - Small, Fast)
- Phi 3 Mini 4K(DirectML - Small, Fast)
- Phi 3 Mini 128K(DirectML - Small, Fast)
Phi 3 Mini 4K 모델을 선택하고 다운로드클릭합니다.
참고 항목
Phi 3 Mini 4K 모델의 크기는 약 2GB-3GB입니다. 네트워크 속도에 따라 다운로드하는 데 몇 분 정도 걸릴 수 있습니다.
놀이터에서 모델 실행
모델을 다운로드하면 내 모델 섹션의 로컬 모델에 표시됩니다. 모델을 마우스 오른쪽 단추로 클릭하고 상황에 맞는 메뉴에서 플레이그라운드 로드를 선택합니다.
플레이그라운드의 채팅 인터페이스에서 다음 메시지와 Enter 키를 입력합니다.
모델 응답이 사용자에게 다시 스트리밍되는 것을 볼 수 있습니다.
경고
디바이스에서 사용할 수 있는 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웹 서버와 상호 작용할 수 있습니다.
다음은 요청에 대한 REST 예제 본문입니다.
{
"model": "Phi-3-mini-4k-directml-int4-awq-block-128-onnx",
"messages": [
{
"role": "user",
"content": "what is the golden ratio?"
}
],
"temperature": 0.7,
"top_p": 1,
"top_k": 10,
"max_tokens": 100,
"stream": true
}'
참고 항목
모델 필드를 다운로드한 모델의 이름으로 업데이트해야 할 수 있습니다.
PostmanRESTAPI 도구를 사용하여 엔드포인트를 테스트 할 수 있습니다.
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)
NuGet을 사용하여 프로젝트에 .NET 용 Azure OpenAI 클라이언트 라이브러리를 추가합니다.
dotnet add {project_name} package Azure.AI.OpenAI --version 1.0.0-beta.17
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 런타임
ONNX 런타임 생성 API는 ONNX 런타임 유추, 로그 처리, 검색 및 샘플링 및 KV 캐시 관리를 포함하여 ONNX 모델에 대한 생성 AI 루프를 제공합니다. 상위 수준 generate() 메서드를 호출하거나 루프에서 모델의 각 반복을 실행하여 한 번에 하나의 토큰을 생성하고 필요에 따라 루프 내에서 생성 매개 변수를 업데이트할 수 있습니다.
greedy/beam 검색 및 TopP, 토큰 시퀀스를 생성하는 TopK 샘플링 및 반복 페널티와 같은 기본 제공 로그 처리를 지원합니다. 다음 코드는 애플리케이션에서 ONNX 런타임을 활용하는 방법의 예입니다.
로컬 REST API 웹 서버에 표시된 예제를 참조하세요. AI 도구 키트 REST 웹 서버는 ONNX 런타임을 사용하여 빌드됩니다.
Numpy 설치:
pip install numpy
다음으로, 플랫폼 및 GPU 가용성에 따라 ONNX 런타임 Python 패키지를 프로젝트에 설치합니다.
| 플랫폼 |
GPU 사용 가능 |
PyPI |
| 윈도우즈 |
예 (AMD, NVIDIA, Intel, Qualcomm 및 기타 지원됨) |
pip install --pre onnxruntime-genai-directml |
| 리눅스 |
예 (Nvidia CUDA) |
pip install --pre onnxruntime-genai-cuda --index-url=https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-genai/pypi/simple/ |
윈도우즈 리눅스 |
아니요 |
pip install --pre onnxruntime-genai |
팁
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)
Python 앱을 실행하려면 다음 코드를 사용합니다.
python app.py --model ~/.aitk/models/{path_to_folder_containing_onnx_file}
참고 항목
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 패키지를 프로젝트에 설치합니다.
다음 코드를 복사하여 C# 파일에 붙여넣습니다.
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/
이후 수행할 단계