2025년 9월 15일 월요일

qwen3-next-80b 모델 이제 lmstudio에서 사용 가능하다!!

 오늘 mlx 업데이트가 되었고 원래 모델 지원 안 한다고 안 되던 모델인

qwen3-next-80b 모델이 사용 가능해졌습니다.

전 맥스튜디오 m1 max 64gb 모델인데 엄격함 등급으로 실행에 성공했습니다.

안되면 가드레일 끄고 하면 될듯 (ram 땡겨 쓸지도)\

mfxp4 양자화 42.37기가 버전입니다.

38 tps 나오네요. 쓸수는 있을듯

이 머신으로 돌리는 거의 최대 모델이기 때문에 기대가 있었는데 안되서 안타까웠는데

즐거운 소식입니다.

2025년 9월 3일 수요일

rtx5080으로 gpt-oss-20b 4bit 돌려보고 정리

lmstudio로 돌려보았다.

최적이라고 생각하는 옵션을 공유해 보겠다.

약 150~160정도의 TPS가 나왔다. 이정도면 뭐 날라다니는 느낌



모델설정

openai/gpt-oss-20b MXFP4 12.11GB

환경설정에서

컨텍스트 길이 (Context Length)

20000 (20k)  - 이건 미세하게 조정하면서 조금 더 늘릴수 있을듯 24k로 하니까 속도가 반토막남

GPU 오프로딩 (GPU Offload)

24 / 24 (이거 100% gpu에 올린다는 옵션일거다)


환경 설정

런타임

GGUF: CUDA 12 llama.cpp 


하드웨어 가드레인

엄격함


GPUs

Limit Model Offload to Dedicated GPU Memory (<- false) 이건 의미 없을듯

NVIDIA GeForce RTX 5080 (-> true)

Offload KV Cache to GPU Memory (->True)


이 샛팅이었다.


최초 160 TPS에서 10K 정도 컨텍스트가 생기면 100TPS 까지 떨어졌다.


끝!


혹시 더 좋은 설정 있으면 공유해 주세요.

2025년 4월 21일 월요일

비트넷 1.58, bitnet 1.58 윈도우 빌드 안될때 chrono bitnet 1.58 chrono

검색이 걸릴지 모르겠습니다.

윈도우 빌드 해볼라고 했는데 참 c++ 안한지 오래라 많이 해맸네요


기본적으로는 github의 설치 가이드대로 하면 됩니다.


git clone --recursive https://github.com/microsoft/BitNet.git

cd BitNet


# (Recommended) Create a new conda environment

conda create -n bitnet-cpp python=3.9

conda activate bitnet-cpp


pip install -r requirements.txt


# Manually download the model and run with local path

huggingface-cli download microsoft/BitNet-b1.58-2B-4T-gguf --local-dir models/BitNet-b1.58-2B-4T

python setup_env.py -md models/BitNet-b1.58-2B-4T -q i2_s



일단 clang, cmake 관련은 하단으로 내리면 윈도우 관련 글이 있다.

"C:\Program Files\Microsoft Visual Studio\2022\Professional\Common7\Tools\VsDevCmd.bat" -startdir=none -arch=x64 -host_arch=x64

아나콘다 프롬프트로 해당 명령을 하면 되는데 위치가 다를 수 있기 때문에 배치 파일을 만들어서 하면 좋다.

매번 해야 하기 때문에 번거롭다.

visual studio도 c++ 개발 등 cmake 관련과 clang 으로 검색해서 나오는것들 설치해주고 하면 된다.



근데 제목의 내용은 하여간 이렇게 하란대로 다 했는데 안 된다.

그래서 llm 으로 물어보니 이러고 저러고 나오는데

간단하게 

C:\BitNet\3rdparty\llama.cpp\common

common.cpp
log.cpp

이렇게 2개에서 문제가 생기는데

error : no type named 'system_clock' in namespace 'std::chrono'


하여간 저 2개의 파일 상단에 보면

#include "log.h"

#include <condition_variable>
#include <cstdarg>
#include <cstdio>
#include <mutex>
#include <sstream>
#include <thread>
#include <vector>
#include <chrono>  <- 추가


이런식으로 해당 라인을 추가해주면 된다.

컴파일 로그를 보내 2개의 파일에서만 문제가 있었고 이후에는 컴파일이 잘 되서 실제로 잘 돌릴 수 있게 되었다.


급하게 글을 적은 이유는 맥으로도 실패(멈춤)했는데 윈도우에서도 안되서 답답했었고 결국

스스로 해결하게 되었는데 나같은 사람 있을까봐 글을 남긴다.

요즘 llm에는 글 긁어서 주면 뭔지 대충 알려줘서 편한거 같다.
하여간 혹시 같은 문제 있으면 이거 보고 해결보시길

2022년 9월 7일 수요일

C# Async/Await Task 속도가 느릴 때 (TaskCompletionSource)

고전적인 개발 방법으로는 작업이 끝났는지 확인하기 위해서

작업 내용을 확인하는 루프를 만들어서 확인을 하는데


나는 이걸 mysql 풀링에 사용했었다.


그러니까 지금 사용 가능한 mysql 연결이 있는지를 task 에서

루프 돌면서 확인하는 방식으로 만들었던 것이다.


그런데 처음에 async/await task 방식이 문제라고 잘못 생각했던 것이

cpu 점유율을 너무 많이 먹었던 것이다.


ram이나 다른 리소스는 문제가 되지 않았다.

그저 cpu 점유율만 높았다. 그래서 이거 계속 써야 하나 싶었다.

그런데 써보니까 async 에서의 순차 실행이 참 편한 부분이 많았고

해결책을 찾아보니 내 코딩 스타일과 맞지 않았던 것이다.


루프 돌면서 쉬는 mysql 연결을 찾는 코드가 문제였는데

전체 확인하고나서 Task.Yield() 해서 한펌 쉬는 코드를 해놨는데

이게 유니티에서의 1프레임 단위가 아니었던 것이다.

결국 mysql 커넥션이 전부 사용중일때 많은 task 들이 yield를 하면서

루프를 도는데 이 텀이 너무 짧다보니 거의 무한루프(?) 돌듯이 계속 체크하면서

cpu를 다 먹었었다.


그래서 task 관련 공부를 더 했고 해결책을 찾았는데 그게

TaskCompletionSource였다.

값이 맞춰질때까지 대기하는 것이기 때문에 mysql을 다 쓴 후 반환하는 코드에서

mysql 연결 인덱스를 맞춰주니 yield를 사용할 필요가 없어서 cpu 사용율이

획기적으로 내려갔다.


사실 이건 내 코딩 스타일이 오래되서 그런거 같다. 하여간 문제는 해결이 되었고

이제 cpu 점유율 문제는 사라졌다.


2022년 4월 3일 일요일

C# CSV 파싱(여러줄 가능)

이전에는 데이터를 엑셀 데이터를 이용했는데 이건 좀 아닌거 같더라

그래서 CSV를 쓰려고 했는데 여러줄이 들어간 경우 때문에 안 쓰게 되었다.

이번에 현지화 관련 작업을 하면서 CSV를 쓰자고 생각이 들었고

CSV에서 어떤 방식으로 저장하는지를 연구해보았다. 일단 잘 동작한다. 

 
public static void ParsingCSV(string file_name,ref string[][] ret)
{
    ret = null;
    string all = ReadAllText(file_name);
    List<List<string>> lines = new List<List<string>>();
    List<string> ln = new List<string>();
    StringBuilder sb = new StringBuilder();
    bool is_string = false;
    int last = all.Length - 1;
    for(int i = 0; i < all.Length;++i)
    {
        Char c = all[i];
        if (is_string)
        {
            if (c == '"')
            {
                if (i < last && all[i + 1] == '"')
                { // " 2개가 연달아나오면 " 문자열을 써주면 된다.
                    sb.Append('"');
                    ++i;
                }
                else
                { // 문자열이 끝나는 상황
                    ln.Add(sb.ToString());
                    sb.Clear();
                    is_string = false;
                }
            }
            else sb.Append(c);
        }
        else
        {
            if (c == '"') is_string = true; // 문자열의 시작이다.
            else if (c == 0x0d)
            {
                ++i; // \r\n
                if (sb.Length > 0) ln.Add(sb.ToString());
                lines.Add(ln);
                sb.Clear();
                ln = new List<string>();
            }
            else if (c == ',')
            {
                if (sb.Length > 0)
                {
                    ln.Add(sb.ToString());
                    sb.Clear();
                }
                else ln.Add("");
            }
            else sb.Append(c);
        }
    }
    if (lines.Count <= 0) return;
    ret = new string[lines.Count][];
    for (int i = 0; i < ret.Length; ++i) ret[i] = lines[i].ToArray();
}
 "",",\r,\d, , 이 정도만 처리하면 되더라. 

 앞으로는 csv로 써보면서 문제 있으면 위 코드를 수정하게 될 것이다.

2022년 3월 12일 토요일

[윈도우 스토어] 워커홀릭

워커홀릭은 윈폼을 이용한 간단한 프로그램입니다.




구조

1. 상단 트리구조로 당장 업무에 필요한 내용을 정리합니다.

2. 하단 메모장에 필요한 내용을 정리합니다.


끝입니다.


시스템 트레이에 두고 관리할 수 있으며 언제든지 쉽고 빠르게 수정할 수 있습니다.

당장 가볍게 훅훅 들어오는 내용을 정리해 놓았다가 업무툴에 반영하기 좋습니다.

장기가 아니 당장 할 목록을 적었다가 지우면서 사용하면 좋습니다.


개인정보 취급 방침

이 앱은 설치형앱이고 아무런 인터넷 통신을 하지 않습니다.

어떠한 개인정보도 수집하지 않습니다.


qwen3-next-80b 모델 이제 lmstudio에서 사용 가능하다!!

 오늘 mlx 업데이트가 되었고 원래 모델 지원 안 한다고 안 되던 모델인 qwen3-next-80b 모델이 사용 가능해졌습니다. 전 맥스튜디오 m1 max 64gb 모델인데 엄격함 등급으로 실행에 성공했습니다. 안되면 가드레일 끄고 하면 될듯 (ra...