Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 748. Windows + Foundry Local - 로컬에서 AI 모델 활용 [링크 복사], [링크+제목 복사],
조회: 351
글쓴 사람
정성태 (seongtaejeong at gmail.com)
홈페이지
첨부 파일
 

Windows + Foundry Local - 로컬에서 AI 모델 활용

AI 모델 활용이 점점 더 쉬워지고 있군요. ^^ 물론, OpenAI와 같은 서비스는 방대한 모델 구축 및 연동 서비스를 통해 좀 더 정교한 결과를 제공하지만 때로는 비용이나 사내 서비스 등의 보안 이슈로 인해 자체 구축한 모델을 활용해야 할 때가 있습니다.

재미있게도, 이러한 흐름에 윈도우 운영체제도 발맞추고 있는데요, 이름하여 "Windows AI Foundry"라는 기능이 그것입니다.

What is Windows AI Foundry?
; https://learn.microsoft.com/en-us/windows/ai/overview

AI Foundry는 활용 환경에 따라 총 3가지 중의 하나를 선택할 수 있는데요,

  1. Windows AI APIs
  2. Foundry Local
  3. Windows ML

첫 번째는 아쉽게도 Copilot PC라고 해서 ARM CPU와 함께 NPU를 기본 장착한 PC에서만 사용할 수 있습니다. Windows 자체에 AI 관련한 모델 및 API를 통합시켰다는 것도 의미가 있지만, 최소 하드웨어 요구 사항을 지정함으로써 성능을 확실하게 보장해 준다는 장점이 있습니다.

만약 일반적인 PC라면 나머지인 Foundry Local과 Windows ML을 선택할 수 있습니다. "Foundry Local"의 경우 원래 "Azure AI Foundary"로 제공하던 기능의 로컬 버전이라고 하는데요,

Get started with Foundry Local
; https://learn.microsoft.com/en-us/windows/ai/foundry-local/get-started

[출처: https://learn.microsoft.com/en-us/azure/ai-foundry/foundry-local/concepts/foundry-local-architecture#key-components]
foundry-local-arch.png

잘은 모르겠지만, NVidia의 Triton Inference Server 역할이 곧 "Foundry Local"이라고 봐도 좋을 듯합니다. 이걸 썼을 때의 장점이라면, 뭐랄까... 여차하면 Cloud의 연산 능력을 활용하도록 쉽게 전환할 수 있다는 점이 아닐까 싶습니다. 참고로, Azure AI Foundry Catalog에서 제공하는 모델은 다음의 링크에서 확인할 수 있습니다.

Azure AI Foundry / 모델 카탈로그
; https://ai.azure.com/explore/models

마지막으로 "Windows ML"은, 기존의 ML 라이브러리라고 봐도 좋겠습니다.

What is Windows ML
; https://learn.microsoft.com/en-us/windows/ai/new-windows-ml/overview

이것들 중에서 이번에 다룰 내용은, 두 번째에 해당하는 "Foundry Local"입니다.




아직 Prevew 단계라 나중에는 많이 바뀔 수도 있으니, 지금 자세하게 보는 것보다는 대충 아래의 내용을 읽어가면서 흐름만 이해해도 좋을 듯합니다.

우선, 설치는 winget을 이용해 다음과 같이 간단하게 할 수 있습니다.

winget install Microsoft.FoundryLocal

// 설치 시 "0x80d02002" 오류가 발생할 수 있습니다. 

설치 후 시작 메뉴를 통해 "Foundry Local" 앱을 실행하면 명령행 창이 뜨는데요,

Description:
  Foundry Local CLI: Run AI models on your device.

  🚀 Getting started:

     1. To view available models: foundry model list
     2. To run a model: foundry model run <model>

     EXAMPLES:
         foundry model run phi-3-mini-4k

Usage:
  foundry [command] [options]

Options:
  -?, -h, --help  Show help and usage information
  --version       Show version information

Commands:
  model    Discover, run and manage models
  cache    Manage the local cache
  service  Manage the local model inference service

C:\Users\testusr>

이와 함께 "Foundry Local" 서비스를 호스팅하는 "Inference.Service.agent.exe" 프로세스가 함께 실행됩니다.

// Inference.Service.agent.exe 경로: "C:\Program Files\WindowsApps\Microsoft.FoundryLocal_0.3.9267.43123_x64__8wekyb3d8bbwe"

C:\Users\testusr> foundry service status
🟢 Model management service is running on http://localhost:5273/openai/status

C:\Users\testusr> curl http://localhost:5273/openai/status
{
  "endpoints": [
    "http://localhost:5273"
  ],
  "modelDirPath": "C:\\Users\\testusr\\.foundry\\cache\\models",
  "pipeName": null
}

달리 말해 Triton Inference Server처럼 저 프로세스가 AI 모델을 호스팅하고, 클라이언트는 이 프로세스에 HTTP 요청을 보내 모델을 실행하는 구조입니다.

자, 그럼 현재 가용한 모델 목록을 볼까요?

C:\Users\testusr> foundry model list
🟢 Service is Started on http://localhost:5273, PID 42196!
Alias                          Device     Task               File Size    License      Model ID
-----------------------------------------------------------------------------------------------
phi-4                          GPU        chat-completion    8.37 GB      MIT          Phi-4-cuda-gpu
                               GPU        chat-completion    8.37 GB      MIT          Phi-4-generic-gpu
                               CPU        chat-completion    10.16 GB     MIT          Phi-4-generic-cpu
--------------------------------------------------------------------------------------------------------
phi-3-mini-128k                GPU        chat-completion    2.13 GB      MIT          Phi-3-mini-128k-instruct-cuda-gpu
                               GPU        chat-completion    2.13 GB      MIT          Phi-3-mini-128k-instruct-generic-gpu
                               CPU        chat-completion    2.54 GB      MIT          Phi-3-mini-128k-instruct-generic-cpu
---------------------------------------------------------------------------------------------------------------------------
phi-3-mini-4k                  GPU        chat-completion    2.13 GB      MIT          Phi-3-mini-4k-instruct-cuda-gpu
                               GPU        chat-completion    2.13 GB      MIT          Phi-3-mini-4k-instruct-generic-gpu
                               CPU        chat-completion    2.53 GB      MIT          Phi-3-mini-4k-instruct-generic-cpu
-------------------------------------------------------------------------------------------------------------------------
mistral-7b-v0.2                GPU        chat-completion    3.98 GB      apache-2.0   mistralai-Mistral-7B-Instruct-v0-2-cuda-gpu
                               GPU        chat-completion    4.07 GB      apache-2.0   mistralai-Mistral-7B-Instruct-v0-2-generic-gpu
                               CPU        chat-completion    4.07 GB      apache-2.0   mistralai-Mistral-7B-Instruct-v0-2-generic-cpu
-------------------------------------------------------------------------------------------------------------------------------------
phi-3.5-mini                   GPU        chat-completion    2.13 GB      MIT          Phi-3.5-mini-instruct-cuda-gpu
                               GPU        chat-completion    2.16 GB      MIT          Phi-3.5-mini-instruct-generic-gpu
                               CPU        chat-completion    2.53 GB      MIT          Phi-3.5-mini-instruct-generic-cpu
------------------------------------------------------------------------------------------------------------------------
deepseek-r1-14b                GPU        chat-completion    9.83 GB      MIT          deepseek-r1-distill-qwen-14b-cuda-gpu
                               GPU        chat-completion    10.27 GB     MIT          deepseek-r1-distill-qwen-14b-generic-gpu
                               CPU        chat-completion    11.51 GB     MIT          deepseek-r1-distill-qwen-14b-generic-cpu
-------------------------------------------------------------------------------------------------------------------------------
deepseek-r1-7b                 GPU        chat-completion    5.28 GB      MIT          deepseek-r1-distill-qwen-7b-cuda-gpu
                               GPU        chat-completion    5.58 GB      MIT          deepseek-r1-distill-qwen-7b-generic-gpu
                               CPU        chat-completion    6.43 GB      MIT          deepseek-r1-distill-qwen-7b-generic-cpu
------------------------------------------------------------------------------------------------------------------------------
qwen2.5-0.5b                   GPU        chat-completion    0.52 GB      apache-2.0   qwen2.5-0.5b-instruct-cuda-gpu
                               GPU        chat-completion    0.68 GB      apache-2.0   qwen2.5-0.5b-instruct-generic-gpu
                               CPU        chat-completion    0.80 GB      apache-2.0   qwen2.5-0.5b-instruct-generic-cpu
------------------------------------------------------------------------------------------------------------------------
qwen2.5-1.5b                   GPU        chat-completion    1.25 GB      apache-2.0   qwen2.5-1.5b-instruct-cuda-gpu
                               GPU        chat-completion    1.51 GB      apache-2.0   qwen2.5-1.5b-instruct-generic-gpu
                               CPU        chat-completion    1.78 GB      apache-2.0   qwen2.5-1.5b-instruct-generic-cpu
------------------------------------------------------------------------------------------------------------------------
qwen2.5-coder-7b               GPU        chat-completion    4.73 GB      apache-2.0   qwen2.5-coder-7b-instruct-cuda-gpu
                               GPU        chat-completion    4.73 GB      apache-2.0   qwen2.5-coder-7b-instruct-generic-gpu
                               CPU        chat-completion    6.16 GB      apache-2.0   qwen2.5-coder-7b-instruct-generic-cpu
----------------------------------------------------------------------------------------------------------------------------
qwen2.5-coder-0.5b             GPU        chat-completion    0.52 GB      apache-2.0   qwen2.5-coder-0.5b-instruct-cuda-gpu
                               GPU        chat-completion    0.52 GB      apache-2.0   qwen2.5-coder-0.5b-instruct-generic-gpu
                               CPU        chat-completion    0.80 GB      apache-2.0   qwen2.5-coder-0.5b-instruct-generic-cpu
------------------------------------------------------------------------------------------------------------------------------
qwen2.5-coder-1.5b             GPU        chat-completion    1.25 GB      apache-2.0   qwen2.5-coder-1.5b-instruct-cuda-gpu
                               GPU        chat-completion    1.25 GB      apache-2.0   qwen2.5-coder-1.5b-instruct-generic-gpu
                               CPU        chat-completion    1.78 GB      apache-2.0   qwen2.5-coder-1.5b-instruct-generic-cpu
------------------------------------------------------------------------------------------------------------------------------
phi-4-mini                     GPU        chat-completion    3.60 GB      MIT          Phi-4-mini-instruct-cuda-gpu
                               GPU        chat-completion    3.72 GB      MIT          Phi-4-mini-instruct-generic-gpu
                               CPU        chat-completion    4.80 GB      MIT          Phi-4-mini-instruct-generic-cpu
----------------------------------------------------------------------------------------------------------------------
phi-4-mini-reasoning           GPU        chat-completion    3.15 GB      MIT          Phi-4-mini-reasoning-cuda-gpu
                               GPU        chat-completion    3.15 GB      MIT          Phi-4-mini-reasoning-generic-gpu
                               CPU        chat-completion    4.52 GB      MIT          Phi-4-mini-reasoning-generic-cpu
-----------------------------------------------------------------------------------------------------------------------
qwen2.5-14b                    GPU        chat-completion    8.79 GB      apache-2.0   qwen2.5-14b-instruct-cuda-gpu
                               CPU        chat-completion    11.06 GB     apache-2.0   qwen2.5-14b-instruct-generic-cpu
-----------------------------------------------------------------------------------------------------------------------
qwen2.5-7b                     GPU        chat-completion    4.73 GB      apache-2.0   qwen2.5-7b-instruct-cuda-gpu
                               GPU        chat-completion    5.20 GB      apache-2.0   qwen2.5-7b-instruct-generic-gpu
                               CPU        chat-completion    6.16 GB      apache-2.0   qwen2.5-7b-instruct-generic-cpu
----------------------------------------------------------------------------------------------------------------------
qwen2.5-coder-14b              GPU        chat-completion    8.79 GB      apache-2.0   qwen2.5-coder-14b-instruct-cuda-gpu
                               GPU        chat-completion    8.79 GB      apache-2.0   qwen2.5-coder-14b-instruct-generic-gpu
                               CPU        chat-completion    11.06 GB     apache-2.0   qwen2.5-coder-14b-instruct-generic-cpu

대략 17개 정도의 모델이 있는데요, 로컬에 설치된 모델은 이렇게 확인할 수 있습니다.

C:\Users\testusr> foundry cache location
💾 Cache directory path: C:\Users\testusr\.foundry\cache\models

C:\Users\testusr> foundry cache list
No models cached on device

최초 실행인 경우 당연히 저렇게 비어 있을 것이고, 아무래도 모델의 용량이 크다 보니 경로를 바꾸는 것을 고려해 볼 수 있습니다.

C:\Users\testusr> foundry cache cd E:\foundry_cache
Restarting service...
🔴 Service is stopped.
🟢 Service is Started on http://localhost:5273, PID 60160!

이제 테스트를 위해 간단하게 (하지만 무려 2.1GB가 넘는) 모델을 하나 다운로드하고,

C:\Users\testusr> foundry model run phi-3-mini-4k
Downloading model...
[####################################] 100.00 % [Time remaining: about 0s]         4.1 MB/s
🕐 Loading model...
🟢 Model Phi-3-mini-4k-instruct-cuda-gpu loaded successfully

Interactive Chat. Enter /? or /help for help.

Interactive mode, please enter your prompt
>

곧바로 제공되는 interactive mode에서 모델과 chat-completion 테스트를 할 수 있습니다. 물론, OpenAI/ChatGPT에 익숙한 분들에게는 실망스럽겠지만 엄연히 저것은 하나의 LLM(Large Language Model)에 불과하므로 그 이상을 기대해서는 안 됩니다.

// "Phi-3-mini-4k" 모델 사용 예

> 한글 창제일은?
🤖 한글은 조선 세종 1세기 1494년에 창제되었으며, 이러한 창제는 한글이라는 글자 속에 있음을 의미한다. 한글은 조선 세종 1세기 1494년에 창제되었으며, 이러한 창제는 한글이라는 글자 속에 있음을 의미한다. 한글은 조선 세종 1세기 1494년에 창제되었으며, 이러한 창제는 한글이라는 글자 속에 있음을 의미한다.

(Note: Hangul, the Korean alphabet, was created in 1443 by King Sejong the Great and his scholars. The year 1494 mentioned in the question is incorrect. The correct year of Hangul's creation is 1443.)


즉, 실제 사용 시에는 fine-tunning을 하거나 적절하게 자신의 업무 도메인에 해당하는 정보와 연동하는 처리를 해야 합니다.

참고로, 위의 "Phi-3-mini-4k" 모델은 "mini" 버전이긴 하지만 GTX 1070 GPU에서는 답변이 한 세월이 걸렸고, 그나마 RTX 4060 Ti에서는 매끄럽게 동작했습니다. 하지만, 이 모델은 너무 경량화여서 한글 처리가 좀 미숙합니다.

// "Phi-3-mini-4k" 모델 사용 예

> 루트 5의 값은?
🤖 루트 5의 값은 8입니다.

료 5은 다음과 같은 수학 연산의 표현입니다:

루트 5 = 5^1

루트 5의 활성화 연산은 원자 수의 자기 반영을 의미합니다, 따라서 5^1은 원자 수 5를 자기 반영하여 8입니다.

Mathematics is a universal language, and the expression "5^1" represents the exponentiation operation, which means "5 raised to the power of 1". The result of 5^1 is 5, but since the question asks for "root 5", it seems there might be a misunderstanding or typo in the question. If the question intended to ask for the square root of 5, then the answer would be approximately 2.236. However, if the question indeed meant "root 5", it would be the fifth root of 5, which is approximately 1.379.

Since the question might have been intended to ask for the square root of 5, the answer provided is the square root of 5, which is approximately 2.236. However, if the question was indeed about the fifth root of 5, the answer would be approximately 1.379.


좀 그렇죠? ^^ 반면, 좀 더 나은 모델을 선택해서, 가령 (8GB에 해당하는) "Phi-4"를 사용하면 한글도 잘 처리하지만,

C:\Users\testusr> foundry model run phi-4
...[생략]...

Interactive mode, please enter your prompt
> 루트 5의 값은?
🤖 루트 5의 값은 5의 제곱근을 의미합니다. 5의 제곱근은 정확히 2.23606797749979와 같은 소수입니다. 일반적으로는 약 2.236으로 근사하여 사용합니다.


문제는, Phi-4 모델의 경우 RTX 4060 Ti에서조차도 답변 시간이 현실적으로는 사용하기 힘든 수준으로 걸렸다는 점입니다. 결국, "Foundry Local"의 문서에서 말하는 것처럼 아무리 다양한 CPU/GPU 지원을 하고 쓰기 쉽게 모델을 호스팅 해준다고는 해도, "현실적인" 것을 고려하면 "Azure AI Foundry"로 갈 수밖에 없을 듯합니다. 단지, 개발만 로컬에서 비용 없이, 보다 쉽게 할 수 있다는 정도의 의미만 있지 않을까... 라는 개인적인 생각입니다. ^^

아니면 아예 "Copilot PC" 정도는 되어야 현실성이 있을 것 같습니다.




당연히, CLI가 아닌 코드를 통해서도 Foundry Local 서버와 연동할 수 있습니다. 아쉽게도 C# 라이브러리가 아직 없는데요,

Integrate inferencing SDKs with Foundry Local
; https://learn.microsoft.com/en-us/azure/ai-foundry/foundry-local/how-to/how-to-integrate-with-inference-sdks?pivots=programming-language-python

따라서 Python을 이용해 다음과 같이 연동할 수 있습니다.

// 파이썬 3.9 이상, foundry-local-sdk 패키지와 openai 패키지 설치
// 
// conda create --name py311build python=3.11 -y
// conda activate py311build
// python -m pip install foundry-local-sdk
// python -m pip install openai

c:\temp> type test.py
import openai
from foundry_local import FoundryLocalManager

# By using an alias, the most suitable model will be downloaded 
# to your end-user's device.
alias = "phi-3.5-mini"

# Create a FoundryLocalManager instance. This will start the Foundry 
# Local service if it is not already running and load the specified model.
manager = FoundryLocalManager(alias)

# Configure the client to use the local Foundry service
client = openai.OpenAI(
    base_url=manager.endpoint,
    api_key=manager.api_key  # API key is not required for local usage
)

stream = client.chat.completions.create(
    model=manager.get_model_info(alias).id,
    messages=[{"role": "user", "content": "Why is the sky blue?"}],
    stream=True
)

# Print the streaming response
for chunk in stream:
    if chunk.choices[0].delta.content is not None:
        print(chunk.choices[0].delta.content, end="", flush=True)

그런데 가만 보면, "foundry-local-sdk" 패키지가 제공하는 것은 로컬에 실행 중인 "Foundry Local" 서비스에 대한 정보를 제공하는 것밖에 없습니다. (아마도 "\Device\NamedPipe\inference_agent" 이름의 named pipe로 통신해 매번 바뀌는 포트 번호를 포함한 Endpoint 정보 등을 조회할 것입니다.)

이후의 코드는 단순히 OpenAI 패키지에서 제공하는 기능을 그대로 사용하는 건데요, 그렇다면 C#의 OpenAI 패키지로도 연동할 수 있지 않을까요?

OpenAI 
; https://www.nuget.org/packages/OpenAI/

아쉽게도, (제가 방법을 모르는 걸 수도 있는데) C# 버전의 OpenAI 패키지에서는 저렇게 사용해도 오류가 발생합니다. 가령, OpenAI 측으로 위와 같은 요청을 보내는 소스 코드를 다음과 같이 만들 수 있는데,

using OpenAI;
using OpenAI.Chat;
using System.ClientModel;

namespace ConsoleApp1;

internal class Program
{
    // Install-Package OpenAI 
    static async Task Main(string[] args)
    {
        string ep = "https://api.openai.com/v1";
        string key = "sk-proj-[...생략]...";
        string alias = "gpt-3.5-turbo";

        OpenAIClientOptions options = new OpenAIClientOptions();
        options.Endpoint = new Uri(ep);

        ApiKeyCredential akc = new ApiKeyCredential(key);
        ChatClient client = new(alias, akc, options);

        ChatCompletion completion = client.CompleteChat("Why is the sky blue?'");

        foreach (var message in completion.Content)
        {
            Console.WriteLine($"[{message.Kind}]: {message.Text}");
        }
    }
}

/* 실행 결과:
[Text]: The sky appears blue because of the way the Earth's atmosphere scatters sunlight. Sunlight is composed of all the colors of the rainbow, but when it passes through the Earth's atmosphere, the shorter blue wavelengths of light are scattered in all directions by the gases and particles in the air. This causes the blue light to dominate our view of the sky, giving it its blue appearance.
*/

파이썬의 FoundryLocalManager로 알아낸 EndPoint와 Key를,

import openai
from foundry_local import FoundryLocalManager

# By using an alias, the most suitable model will be downloaded 
# to your end-user's device.
alias = "phi-3.5-mini"

# Create a FoundryLocalManager instance. This will start the Foundry 
# Local service if it is not already running and load the specified model.
manager = FoundryLocalManager(alias)

print(manager.endpoint) // http://localhost:5273/v1
print(manager.api_key) // OPENAI_API_KEY

Foundry Local의 모델에 대한 Alias를 곁들여,

C:\Users\testusr> foundry cache list
Models cached on device:
   Alias                         Model ID
💾 phi-3-mini-4k                 Phi-3-mini-4k-instruct-cuda-gpu
💾 phi-3.5-mini                  Phi-3.5-mini-instruct-cuda-gpu
💾 phi-4                         Phi-4-cuda-gpu

C# OpenAI 라이브러리에 설정해도,

string ep = "http://localhost:5273/v1";
string key = "OPENAI_API_KEY";  // Foundry Local에는 API Key가 필요 없다고 하는데, 빈 문자열로 넘기면 예외 발생
string alias = "phi-3.5-mini";

// ...[생략]...

실행 시 이런 오류가 발생합니다.

Unhandled exception. System.ClientModel.ClientResultException: Service request failed.
Status: 400 (Bad Request)

   at OpenAI.ClientPipelineExtensions.ProcessMessage(ClientPipeline pipeline, PipelineMessage message, RequestOptions options)
   at OpenAI.Chat.ChatClient.CompleteChat(BinaryContent content, RequestOptions options)
   at OpenAI.Chat.ChatClient.CompleteChat(IEnumerable`1 messages, ChatCompletionOptions options, CancellationToken cancellationToken)
   at OpenAI.Chat.ChatClient.CompleteChat(ChatMessage[] messages)
   at ConsoleApp1.Program.Main(String[] args) in C:\temp\ConsoleApp1\ConsoleApp1\Program.cs:line 30
   at ConsoleApp1.Program.<Main>(String[] args)

음... 디버깅하기 귀찮군요. ^^ 일단은 그냥 아직 Preview 버전이니 정식 버전이 나올 때까지 여유롭게 기다리면 C# Foundry Client 라이브러리가 나올지도 모르니 여기까지만 하겠습니다. ^^

검색해 보니까 Azure AI Foundry를 대상으로 한 라이브러리가 있는 것 같은데,

Azure Inference client library for .NET
; https://github.com/Azure/azure-sdk-for-net/blob/Azure.AI.Inference_1.0.0-beta.5/sdk/ai/Azure.AI.Inference/README.md

아마 저기에 Foundry Local에 대한 통합도 해주지 않을까... 라는 기대를 해봅니다. ^^;




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/6/2025]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 76  77  78  79  80  [81]  82  83  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11934정성태6/7/201922418VC++: 133. typedef struct와 타입 전방 선언으로 인한 C2371 오류파일 다운로드1
11933정성태6/7/201920043VC++: 132. enum 정의를 C++11의 enum class로 바꿀 때 유의할 사항파일 다운로드1
11932정성태6/7/201919462오류 유형: 544. C++ - fatal error C1017: invalid integer constant expression파일 다운로드1
11931정성태6/6/201920153개발 환경 구성: 441. C# - CairoSharp/GtkSharp 사용을 위한 프로젝트 구성 방법
11930정성태6/5/201920685.NET Framework: 842. .NET Reflection을 대체할 System.Reflection.Metadata 소개 [1]
11929정성태6/5/201920124.NET Framework: 841. Windows Forms/C# - 클립보드에 RTF 텍스트를 복사 및 확인하는 방법 [1]
11928정성태6/5/201919315오류 유형: 543. PowerShell 확장 설치 시 "Catalog file '[...].cat' is not found in the contents of the module" 오류 발생
11927정성태6/5/201920535스크립트: 15. PowerShell ISE의 스크립트를 복사 후 PPT/Word에 붙여 넣으면 한글이 깨지는 문제 [1]
11926정성태6/4/201920648오류 유형: 542. Visual Studio - pointer to incomplete class type is not allowed
11925정성태6/4/201920920VC++: 131. Visual C++ - uuid 확장 속성과 __uuidof 확장 연산자파일 다운로드1
11924정성태5/30/201922529Math: 57. C# - 해석학적 방법을 이용한 최소 자승법 [1]파일 다운로드1
11923정성태5/30/201922153Math: 56. C# - 그래프 그리기로 알아보는 경사 하강법의 최소/최댓값 구하기파일 다운로드1
11922정성태5/29/201919491.NET Framework: 840. ML.NET 데이터 정규화파일 다운로드1
11921정성태5/28/201925649Math: 55. C# - 다항식을 위한 최소 자승법(Least Squares Method)파일 다운로드1
11920정성태5/28/201916459.NET Framework: 839. C# - PLplot 색상 제어
11919정성태5/27/201921456Math: 54. C# - 최소 자승법의 1차 함수에 대한 매개변수를 단순 for 문으로 구하는 방법 [1]파일 다운로드1
11918정성태5/25/201921665Math: 53. C# - 행렬식을 이용한 최소 자승법(LSM: Least Square Method)파일 다운로드1
11917정성태5/24/201922962Math: 52. MathNet을 이용한 간단한 통계 정보 처리 - 분산/표준편차파일 다운로드1
11916정성태5/24/201920919Math: 51. MathNET + OxyPlot을 이용한 간단한 통계 정보 처리 - Histogram파일 다운로드1
11915정성태5/24/201924308Linux: 11. 리눅스의 환경 변수 관련 함수 정리 - putenv, setenv, unsetenv
11914정성태5/24/201923063Linux: 10. 윈도우의 GetTickCount와 리눅스의 clock_gettime파일 다운로드1
11913정성태5/23/201919221.NET Framework: 838. C# - 숫자형 타입의 bit(2진) 문자열, 16진수 문자열 구하는 방법파일 다운로드1
11912정성태5/23/201919510VS.NET IDE: 137. Visual Studio 2019 버전 16.1부터 리눅스 C/C++ 프로젝트에 추가된 WSL 지원
11911정성태5/23/201918495VS.NET IDE: 136. Visual Studio 2019 - 리눅스 C/C++ 프로젝트에 인텔리센스가 동작하지 않는 경우
11910정성태5/23/201927741Math: 50. C# - MathNet.Numerics의 Matrix(행렬) 연산 [1]파일 다운로드1
11909정성태5/22/201922256.NET Framework: 837. C# - PLplot 사용 예제 [1]파일 다운로드1
... 76  77  78  79  80  [81]  82  83  84  85  86  87  88  89  90  ...