[.Net] ์์ฑํ AI, C#์์ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM) LLaMaSharp ์ฌ์ฉํ๊ธฐ(์์ ํฌํจ)
์์ฑํ(Generative) AI๋?
๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ์ฝํ ์ธ ๋ฅผ ์์ฑํ๋ ๊ธฐ์ ๋ก, ์ด๋ฏธ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ์ฌ ์๋ก์ด ์ด๋ฏธ์ง, ํ ์คํธ, ์์ ๋ฑ ๋ค์ํ ํํ์ ์ฝํ ์ธ ๋ฅผ ๋ง๋ค์ด๋ด๋ ์ธ๊ณต์ง๋ฅ์ ๋๋ค.
'์ ์'๋ง ๋ค์ด๋ณด๋ฉด ์ ์๋ฟ์ง ์์ ํ
๋ฐ์. OpenAI์ ChatGPT๋ ์ ์์ค ๊ฒ๋๋ค. ์ด ChatGPT๋ ํ
์คํธ ์์ฑ์ ์ด์ ์ ๋ง์ถ ์์ฑํ AI๋ก, ๋ฐฉ๋ํ ์์ ๋ฐ์ดํฐ๋ฅผ ํ์ตํ์ฌ ์ฌ์ฉ์์ ์์ฐ์ค๋ฌ์ด ๋ํ๋ฅผ ๋๋ ์ ์๋ ๊ธฐ์ ์ ์ ๊ณตํฉ๋๋ค. ์กฐ์ฌํด์ผ ํ ๋ถ๋ถ์, ChatGPT์ ๋ต๋ณ์ 100% ์ ๋ต์ด ์๋๋ฉฐ ํ์ ๋ฐ์ดํฐ(Hallucination)
๋ฅผ ๊ตฌ๋ถํ ์ค ์์์ผ ํ๋ค๋ ์ ์
๋๋ค. ์ฆ, ๋งน์ ํ๊ธฐ๋ณด๋ค๋ ์์ฌํ๋ ์์ธ๋ฅผ ์ทจํ๊ณ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์์ฆ์ ๋๊ธฐ์ ๋ฟ๋ง ์๋๋ผ ์คํํธ์ ๊ธฐ์ ์์๋ ์์ฑํ AI๋ฅผ ํ์ฌํ ์๋น์ค๋ฅผ ๋ด๋๊ณ ์์ต๋๋ค. ์ ๋ ํนํ, ์ต๊ทผ 3D ์ ํ ์ ์กฐ์ฌ์์ ์์ ๋ค์ ๊ธฐ์ ๊ณผ ๋งค๋ด์ผ์ ๊ธฐ๋ฐ์ผ๋ก ์์ฑํ AI ์๋น์ค๋ฅผ ์ถ์ํ์ฌ, ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ๊ธฐ์ ์ง์ ๋น๋๋ฅผ ์ค์ด๊ณ , ์ํ๋ ๋ต๋ณ์ ๋งค๋ด์ผ ์ ๋ณด๋ก ํ์ํด ์ ๋ขฐ์ฑ์ ๋์ธ ๋ถ๋ถ์ด ๋๋จํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด์ ๋จ์ํ ์ ํํ๋ ๋๋ต๋ง ํ๋ ์ฑ๋ด์ ๋ง์ฃผ์น๋ฉด ์ฑ๊ฑฐ์ด ๊ธฐ๋ถ์ด ๋ญ๋๋ค.
์, ์ด๋ฒ ๋ณธ๋ฌธ์์๋ C# ๊ธฐ๋ฐ์ธ LLaMaSharp ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๋๊ท๋ชจ ์ธ์ด ๋ชจ๋ธ(LLM)
์ ์ฌ์ฉํด ์ง๋ฌธํ๊ณ ๋ต๋ณ์ ์ป์ด๋ณด๋ ค๊ณ ํฉ๋๋ค. (์ฌ์ค, ๋๋ง์ LLM์ ํน์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ต์์ผ๋ณด๊ณ ์ถ์ง๋ง, ๊น์ ์ง์๊ณผ ๊ณ ์ฑ๋ฅ ํ๋์จ์ด๊ฐ ๋ถ์กฑํ์ฌ ๋์ ํ์ง ๋ชปํ๊ณ ์์ด ์์ฝ๋ค์.)
LLaMaSharp ์๊ฐ
LLaMaSharp์ Meta์์ ๊ฐ๋ฐํ LLaMA ๋ชจ๋ธ ๊ธฐ๋ฐ์ ํฌ๋ก์ค ํ๋ซํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ CPU ๋๋ GPU๋ฅผ ์ ํํ์ฌ ๋ค์ํ ๋์ ์ฑ๋ฅ์ ํ์ธํ ์ ์์ต๋๋ค.
์๋ ๋ฐ๋ชจ ์์์ ๋ณด๋ฉด, ์ฌ์ฉ์๊ฐ ์ง๋ฌธ(์ด๋ก์)ํ๋ฉด ๋ต๋ณ(ํฐ์)์ ๋ฐ์ ์ ์์ต๋๋ค. ์ฝ๋ ์์ฑ์ ์์ฒญํ๋๋ฐ ์ ์๋ ค์ฃผ๋ค์.
์๋๋ ์๊ฐ์ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ LLaVa์ ๋์ ๋ฐ๋ชจ ์์์ ๋๋ค.
๋ฐ๋ผ ํ๊ธฐ
1. CUDA 12 SDK ์ค์นํ๊ธฐ
LLaMaSharp์ ์ฌ์ฉํ๊ธฐ ์ํด์ CUDA๋ฅผ ์ฌ์ฉํ๋ค๋ฉด CUDA 11 ๋๋ CUDA 12 SDK๊ฐ ํ์ํฉ๋๋ค. ์ ๋ CUDA Toolkit 12.4๋ฅผ ์ค์นํ์ต๋๋ค.
2. ํ๋ก์ ํธ ์์ฑํ๊ธฐ
์ ๋ Visual Studio 2022๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ์(.Net Core 8.0) ํ๋ก์ ํธ๋ฅผ ์์ฑํ์ต๋๋ค.
3. Nuget ์ค์นํ๊ธฐ
Nuget ํจํค์ง ๊ด๋ฆฌ์์ LLaMaSharp์ ๊ฒ์ํ๊ณ , ๋ค์์ ํญ๋ชฉ์ ์ค์นํฉ๋๋ค.
- LLaMaSharp
- LLaMaSharp.Backend.Cpu (CPU ์ฌ์ฉ ์)
- LLaMaSharp.Backend.Cuda11 or 12 (GPU, CUDA 11 ๋๋ 12 ์ฌ์ฉ์ ๋ฐ๋ผ ์ ํ)
- Spectre.Console
4. ๋ชจ๋ธ ํ์ผ ์ค๋นํ๊ธฐ
LLM์ ๋ชจ๋ธ ํ์ผ์๋ PyTorch ํ์(.pth)
๊ณผ Huggingface ํ์(.bin)
์ด ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. LLamaSharp๋ GGUF ํ์ ํ์ผ์ ์ฌ์ฉํ๋๋ฐ, ์ด ๋ ํ์์์ ๋ณํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ค์์ GGUF ํ์ผ์ ์ป๊ธฐ ์ํ ๋ฐฉ๋ฒ์ ์ค๋ช
ํฉ๋๋ค.
4-1. Hugging Face์์ ์ป๊ธฐ
ํ๊น ํ์ด์ค(Hugging Face)๋ ๋ค์ํ ์ธ๊ณต์ง๋ฅ ๋ชจ๋ธ์ ์คํ ์์ค๋ก ์ ๊ณตํ๋ ์ฌ์ดํธ์ ๋๋ค. ์ด ์ฌ์ดํธ์์ '๋ชจ๋ธ์ด๋ฆ + GGUF'๋ก ๊ฒ์ํ์ฌ ๋ค์ด๋ก๋ํ ์ ์์ต๋๋ค.
Hugging Face – The AI community building the future.
4-2. ์ง์ ๋ณํํ๊ธฐ
PyTorch ๋๋ Huggingface ํ์์ ๋ชจ๋ธ ํ์ผ์ ์ง์ GGUF ํ์์ผ๋ก ๋ณํํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์๋ ๋งํฌ์ ๊ฐ์ด๋์ ๋ฐ๋ผ ํ์ด์ฌ ์คํฌ๋ฆฝํธ๋ก ๋ณํ์ด ๊ฐ๋ฅํฉ๋๋ค.
GitHub - ggerganov/llama.cpp: LLM inference in C/C++
ํ์ง๋ง ์ด๋ฌํ ๋ณํ ๊ณผ์ ์ด ์ ์ฒ๋ผ ์ต์์น ์์ผ์๋ค๋ฉด, ์์ฝ์ง๋ง ํ๊น ํ์ด์ค์์ ์ ๊ณตํ๋ ๊ฒ๋ง ์ฐพ์ ์ธ ์๋ฐ์ ์์ต๋๋ค.
5. ์ฝ๋ ์์ฑํ๊ธฐ
LLaMaSharp์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ์์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์ฌ ์๋์ ๋ฉ์ธ ์ฝ๋๋ฅผ ์ค๋นํ์ต๋๋ค.
using LLama;
using LLama.Common;
using LLama.Examples;
public class ChatSessionWithRoleName
{
public static async Task Main()
{
string modelPath = UserSettings.GetModelPath();
var parameters = new ModelParams(modelPath)
{
ContextSize = 1024,
GpuLayerCount = 10,
MainGpu = 0
};
using var model = LLamaWeights.LoadFromFile(parameters);
using var context = model.CreateContext(parameters);
var executor = new InteractiveExecutor(context);
ChatSession session = new(executor);
InferenceParams inferenceParams = new InferenceParams()
{
AntiPrompts = new List<string> { "User:" }
};
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("The chat session has started.");
// show the prompt
Console.ForegroundColor = ConsoleColor.Green;
string userInput = Console.ReadLine() ?? "";
while (userInput != "exit")
{
await foreach (
var text
in session.ChatAsync(
new ChatHistory.Message(AuthorRole.User, userInput),
inferenceParams))
{
Console.ForegroundColor = ConsoleColor.White;
Console.Write(text);
}
Console.ForegroundColor = ConsoleColor.Green;
userInput = Console.ReadLine() ?? "";
Console.ForegroundColor = ConsoleColor.White;
}
}
}
ContextSize, GpuLayerCount ๋ฑ์ ํ๋ผ๋ฏธํฐ ํ๋์ด ๊ฐ๋ฅํ๋, ์์ธํ ๋ค๋ฃฐ ์ค ๋ชฐ๋ผ ๊ธฐ๋ณธ ๊ฐ์ผ๋ก ์ ์ฉํ์ต๋๋ค. ์ ์ฒด ์ฝ๋๋ ์๋ ์ฒจ๋ถ๋ ํ๋ก์ ํธ ํ์ผ์ ์ฐธ๊ณ ํ์ธ์.
๋์ ํ๋ฉด
์ ๋ ํ๊น ํ์ด์ค์์ llama-3-Korean-Bllossom-8B-Q4_K_M.gguf ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ์ฌ ๋ํ๋ฅผ ์๋ํด ๋ณด์์ต๋๋ค. ์ถ๊ตฌ ๊ฒฝ๊ธฐ์ ๊ท์น์ ์ค๋ช ํด ๋ฌ๋ผ๊ณ ํ๋๋ฐ, ๊ทธ๋ด์ธํ ๋ต๋ณ์ ์ฃผ๋ค๊ฐ ์ด๋ ์๊ฐ๋ถํฐ๋ ์ด์ํ ๋ต๋ณ์ ์ฃผ๊ธฐ ์์ํฉ๋๋ค.
๋ชจ๋ธ์ ๋ฌธ์ ๋ผ๊ธฐ๋ณด๋ค๋, ์๋ง๋ ์ ๊ฐ ์ฌ์ฉํ ํ๋ผ๋ฏธํฐ ํ๋์ ๋ฌธ์ ์ด์ง ์๋๊น ์ถ์ต๋๋ค.
์ ๋ฆฌํ๋ฉฐ
๋ก์ปฌ PC ๊ธฐ๋ฐ์ LLM ์ฌ์ฉ์ ์ด๋ค๊ฐ ์ดํด๋ณด์๋๋ฐ์. ์ฌ๋ฌ ๋ชจ๋ธ์ ๋ค์ด๋ก๋ํ์ฌ ํ ์คํธํด ๋ณด์์ง๋ง, ํ๋์จ์ด ์ฌ์ ๋ถ์กฑ, ํ๋ ์์ง ๋ฑ์ ๋ฌธ์ ๋ก ์ํ๋ ์ฑ๋ฅ์ ์ป์ง๋ ๋ชปํ์ต๋๋ค. ์ด์งธ์์ธ์ง, ๋ต๋ณ์ด ๋๋์ง ์๊ณ ์ด์ํ ๋ด์ฉ๋ง ์ฃผ๋๊ตฐ์.
๊ฐ์ธ์ ์ผ๋ก ๋ง๋ค์ด ๋ณด๊ณ ์ถ์ ๊ฒ์ด ์๋๋ฐ, ์ด์ ์ ํฉํ ๋ชจ๋ธ์ ์ฐพ๋ ๊ฒ๋ถํฐ ํ๋ผ๋ฏธํฐ ํ๋, ํ๋์จ์ด ์ค๋น ๋ฑ ์๊ฐํด์ผ ํ ๊ฒ๋ค์ด ๋๋ฌด ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค.
๋ค์์๋ OpenAI API์ ๊ฐ์ ์๋น์ค๋ฅผ ์ด์ฉํ์ฌ ์กฐ๊ธ ๋ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์ ๊ทผ์ด ๊ฐ๋ฅํ์ง ์์๋ณด๋ ค๊ณ ํฉ๋๋ค.
'Programming > .Net' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[.Net] XML ํ์ผ ์ฝ๊ธฐ์ ์ฐ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ง๋ ฌํ(Serialization)๋ก ๊ฐ์ฒด์ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ(์์ ํฌํจ)
[.Net] XML ํ์ผ ์ฝ๊ธฐ์ ์ฐ๊ธฐ, ๊ทธ๋ฆฌ๊ณ ์ง๋ ฌํ(Serialization)๋ก ๊ฐ์ฒด์ ์ฐ๋ํ๋ ๋ฐฉ๋ฒ(์์ ํฌํจ)
2024.05.13 -
[.Net] WinForm UI ์ปจํธ๋กค ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(Data Binding) ํํค์น๊ธฐ(์์ ํฌํจ)
[.Net] WinForm UI ์ปจํธ๋กค ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ(Data Binding) ํํค์น๊ธฐ(์์ ํฌํจ)
2024.03.24 -
[.Net] ML.NET์ ์ด์ฉํ ๋ฅ ๋ฌ๋ ๋ชจ๋ธ ์์ฑํ๊ธฐ - ์ด๋ฏธ์ง ๋ถ๋ฅ
[.Net] ML.NET์ ์ด์ฉํ ๋ฅ ๋ฌ๋ ๋ชจ๋ธ ์์ฑํ๊ธฐ - ์ด๋ฏธ์ง ๋ถ๋ฅ
2023.10.15 -
[.Net] ์ง์ฐ(Delay) ํจ์๋ค์ ํน์ง๊ณผ ์ฐจ์ด์ ์ ๋ฆฌ
[.Net] ์ง์ฐ(Delay) ํจ์๋ค์ ํน์ง๊ณผ ์ฐจ์ด์ ์ ๋ฆฌ
2023.01.09