이름에도 보다시피 LLM, 즉 AI를 C#에서 사용하기 위한 라이브러리다
파이썬이 일반사용자용 프로그램만들때 거지같은 점이 있기 때문에
(내가 파이썬을 쓰레기 언어라고 하는 이유중 하나다)
윈폼과 융합하려는 시도가 있었고
그 결과물이 LLaMaSharp이다
NuGet은 두개 받아야 한다
CUDA 많이 쓰는데 CUDA 안 깔은 이유는 호환성을 위해서다.
CUDA는 엔비디아 전용이라 암드유저와 이용환경 차이가 발생하니까
그냥 혼자쓸거면 CUDA용으로 깔아도 된다.
CUDA없이 CUDA용으로 깔아도 작동 자체는 되지만 난 비추천한다
차세대 OpenGL인 Vulkan이 있는데 뭐하러 개구진 Cuda를 쓴단말인가
위에서도 일반사용자 때문에 파이썬 구리다했는데 Cuda써서 또 사용자 쳐낼거면 이거쓰는 의미가 없다
이제 모델을 준비해야 할 차례인데 보통은 Hugging Face에서 다운받는다
Hugging Face – The AI community building the future.
The Home of Machine Learning Create, discover and collaborate on ML better. We provide paid Compute and Enterprise solutions. We are building the foundation of ML tooling with the community.
huggingface.co
(기분나쁘게 생겨서 한번만 봐도 뇌리에 남는다. 아 그거!)
GGUF와 GGML이 있는데 GGUF를 권장한다
왜냐면 GGUF가 더 최신 포맷이기 때문에
나는 TinyLlama모델을 썼다
왜냐고? 가벼우니까
근데 쓰다보니 phi2모델보다 좋은듯한 느낌이 들음
먼저 Hugging Face상단에 TinyLlama라고 검색한다
그러면 이렇게 주르륵 뜰건데 GGUF를 받아야 한다
https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF/tree/main
TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF at main
huggingface.co
이거
참고로 gguf는 여러가지 버전이 있는데 Q가 낮을수록 경량모델이다.
Q는 비트수를 줄임으로서 경량화 한것이며 Q2는 2비트 Q3는 3비트이다
그런데 Q2나 Q4나 동일하게 Int4연산에 들어가서 그런진 몰라도 처리속도가 비슷하게 나온다
찾아보니 Q2랑 Q4 차이는 처리속도보다는 메모리사용량에 따라 선택하라고 한다. 어쩐지
이 윗단계로는 f16이 있다
그리고 모든 gguf 네이밍규칙에는 뒤에 무인/S/M/L이 있는데
스케일 조정에 따른 압축률에 따라 분류하는것이라고 하는데
어차피 윗단계 비트보다 작게 조정되므로 그냥 소숫점이라고 생각하면 된다. 무인=0, S=0.25,M=0.5,L=0.75
그러니까 Q2_K_S는 대충 2.25정도의 성능 Q4_K_M은 4.5정도의 성능
그래서 왠만하면 Q4_M을 쓰는게 좋은듯
심지어 해당 모델의 설명을 읽어보면 이중 Q4_K_M 모델이 제일 쓸만하다고 한다
그리고 0이 붙은건 안 쓰는게 좋다. 구형형식이라서
다 받았으면 빌드후 나오는 exe 있는곳에 Models폴더 만들고
Models 폴더에 이렇게 넣어준다
코드는 이 세곳을 참고해서 짜야한다
https://github.com/SciSharp/LLamaSharp
https://huggingface.co/TinyLlama/TinyLlama-1.1B-Chat-v1.0
https://huggingface.co/TheBloke/TinyLlama-1.1B-Chat-v1.0-GGUF
근데 프롬프트를 잘 짜야 한다 안 그러면 아래처럼 된다
(뇌절킹)
ㅡㅡ 프롬프트 짜는거 ㅈㄴ 어렵다
기능상 자동완성과 큰 차이가 없기 때문에 역할을 제대로 주지 않으면 나불거리기만 한다
사람또한 '자기 자신은 무엇이다' 라는 기억을 통해서 주체와 행동을 확립하지 않는가? 비슷하다고 보면 된다.
다행스럽게도 프롬프트를 쉽게 짤수 있게 ChatSession이라는 클래스가 있다
내가 사용한 코드는 아래에 올려두었다
https://gist.github.com/ahzkwid/e8f0454f4501921f56519d2ec516ddb7
LLaMaSharpSample
LLaMaSharpSample. GitHub Gist: instantly share code, notes, and snippets.
gist.github.com
using LLama;
using LLama.Common;
using LLama.Sampling;
using System.Diagnostics;
namespace LLaMaSharpSample
{
internal static class LLM
{
private static ChatSession _chatSession;
static LLM()
{
var modelPath = "Models/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf";
var modelParams = new ModelParams(modelPath)
{
ContextSize = 2048
};
var weights = LLamaWeights.LoadFromFile(modelParams);
var context = new LLamaContext(weights, modelParams);
var executor = new InteractiveExecutor(context);
var chatHistory = new ChatHistory();
chatHistory.AddMessage(AuthorRole.System,
"You are a concise and helpful assistant. Respond in a single short sentence.");
_chatSession = new ChatSession(executor, chatHistory);
Debug.WriteLine("NLP()");
Debug.Write("User:");
}
public static async void Chat(string userInput)
{
Debug.WriteLine($"{userInput}");
var inferParams = new InferenceParams
{
MaxTokens = 256,
AntiPrompts = new List<string> { "User:" },
SamplingPipeline = new DefaultSamplingPipeline()
};
Debug.Write("\n");
await foreach (var token in _chatSession.ChatAsync(
new ChatHistory.Message(AuthorRole.User, userInput),
inferParams))
{
Debug.Write(token);
}
}
}
}
이제 좋같은 파이썬 안 써도 된다
야호
UI나 클래스는 알아서 붙이자
끝
'AI' 카테고리의 다른 글
AI 번역기 만들기 TinyLLaMa vs Phi-2 (0) | 2025.05.26 |
---|---|
인공신경망 작동 원리 (0) | 2025.02.18 |
AI 환각현상과 분리뇌 현상의 유사성 (0) | 2025.02.04 |