2024년 3월 16일 토요일

GPU 없는 로컬에서 서비스 가능한 경량 소형 LLM, LLAMA2.c, llama.cpp 빌드, 실행, 학습 및 코드 분석하기

이 글은 GPU 없는 컴퓨터에서 경량 LLAMA2.c (라마씨), llama.cpp 를 빌드하고, 로컬에서 실행, 학습하는 방법을 간략히 따라해 본다.
개요
앞서 설명한 코드 라마2는 최소 28GB이상의 GPU RAM이 필요하다. 많은 개발자의 경우, 현재 시점에서 이 정도 수준의 GPU 스펙 장비를 가진 경우는 매우 드물다. CoLab의 경우 T4 GPU는 16GB 크기를 가진다. 그러므로, 이를 해결할 수 있는 솔류션이 개발되었다. 

LLAMA2.c는 OpenAI 엔지니어인 Andrej Karpathy가 개발한 라마2를 이용한 소형 LLM 오픈소스 프로젝트이다. 이 라마 코드는 순수 C로 개발되었으며, 모델은 겨우 100MB로 동작되어, GPU가 없는 로컬 PC에서도 가볍게 실행된다.

llama.cpp는 불가리아의 개발자 게오르기 게르가노프(Georgi Gerganov)가 2023년 3월, 고가의 GPU 없이도 일반 사용자 환경에서 거대 언어 모델(LLM)을 효율적으로 실행하려는 목적으로 시작한 오픈소스 프로젝트이다. 

파이썬 의존성을 완전히 제거하고 순수 C/C++로 구현하여 이식성을 극대화했으며, 자체 개발한 GGML 라이브러리와 GGUF 파일 포맷을 통해 메모리 사용량과 연산 효율을 획기적으로 최적화했다. 특히 모델의 가중치를 압축하는 양자화 기술을 도입하여, 수십 GB에 달하는 거대 모델을 가정용 PC의 제한된 RAM에서도 원활히 구동할 수 있도록 구현함으로써 로컬 AI의 대중화를 이끌었다. 

LLAMA.c 설치, 사용법 및 분석
LLAMA.c 설치
설치, 실행 및 학습 방법은 다음과 같다. 터미널에서 다음 명령을 실행한다.
cd llama2.c
wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin

이 결과, https://huggingface.co/datasets/roneneldan/TinyStories 으로 학습된 모델이 다운로드된다.

실행하기
코드를 컴파일하고, 다운로드받은 스토리 학습 모델을 실행한다. 
make run
./run stories15M.bin

실행 결과는 다음과 같다. 텍스트가 잘 생성되는 것을 확인할 수 있다.

좀 더 큰 모델을 다운받아 실행해 본다.
wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories42M.bin
./run stories42M.bin
./run stories42M.bin -t 0.8 -n 256 -i "One day, Lily met a Shoggoth"


다음과 같이, 접두어, 추가 명령줄 인수를 지정할 수도 있다.
-t: 생성 온도. 0~1.0
 
데이터 학습 방법
새로운 데이터 훈련을 위해서는 앞에서 사용한 스토리 모델이 어떻게 학습되었는지 확인해 볼 필요가 있다. 그 방법은 다음과 같다.
python tinystories.py download
python tinystories.py pretokenize
python train.py

학습 데이터 다운로드 화면 일부

이제 컴파일을 한다. 
make run

다음과 같이 실행하면 된다. 
./run stories15M.bin

코드 및 학습 데이터 분석하기
LLAMA2.c의 구조는 매우 간단한데, make파일을 분석해 보면 단 하나의 run.c를 컴파일해 실행파일을 빌드하는 것을 확인할 수 있다.
gcc -O3 -o run run.c -lm

run.c의 주요 부분을 살펴보면 다음과 같다. 
typedef struct {
    // token embedding table
    float* token_embedding_table;    // (vocab_size, dim)
    // weights for rmsnorms
    float* rms_att_weight; // (layer, dim) rmsnorm weights
    float* rms_ffn_weight; // (layer, dim)
    // weights for matmuls. note dim == n_heads * head_size
    float* wq; // (layer, dim, n_heads * head_size)
    float* wk; // (layer, dim, n_kv_heads * head_size)
    float* wv; // (layer, dim, n_kv_heads * head_size)
    float* wo; // (layer, n_heads * head_size, dim)
    // weights for ffn
    float* w1; // (layer, hidden_dim, dim)
    float* w2; // (layer, dim, hidden_dim)
    float* w3; // (layer, hidden_dim, dim)
    // final rmsnorm
    float* rms_final_weight; // (dim,)
    // (optional) classifier weights for the logits, on the last layer
    float* wcls;
} TransformerWeights;

이 구조체의 이름은 TransformerWeights이며, 이는 Transformer 모델의 가중치를 저장하는 데 사용된다. 트랜스포머의 어텐션 스코어를 계산하는 데 핵심적인 자료구조이다. 각 필드는 다음과 같은 의미를 가진다:
  • token_embedding_table: 토큰 임베딩 테이블을 나타낸다. 이는 어휘 크기(vocab_size)와 차원(dim)의 2차원 배열이다.
  • rms_att_weight, rms_ffn_weight: RMSNorm의 가중치를 나타낸다. 각각 attention과 feed-forward network에 대한 것이다.
  • wq, wk, wv, wo: 각각 query, key, value, output에 대한 가중치를 나타낸다. 이들은 multi-head attention에서 사용된다.
  • w1, w2, w3: feed-forward network에서 사용되는 가중치이다.
  • rms_final_weight: 최종 RMSNorm의 가중치를 나타낸다.
  • wcls: (선택적으로) 마지막 레이어에서 로짓에 대한 분류기 가중치를 나타낸다.
  • 이 구조체는 Transformer 모델의 가중치를 저장하고 관리하는 데 사용된다.
전체적인 프로그램 실행 구조는 다음과 같다. 

1. 이 코드는 트랜스포머 모델의 구성, 가중치 및 상태에 대한 구조와 메모리 할당, 메모리 해제 및 체크포인트 읽기 기능을 정의한다.
2. 'rmsnorm', 'softmax', 'matmul'과 같은 신경망 블록을 위한 함수도 포함되어 있다.
3. 코드는 Transformer 모델을 통해 입력 토큰을 처리하여 출력 로짓을 생성하는 'forward' 함수를 구현한다.
4. 또한 BPE(Byte Pair Encoding) 토크나이저가 문자열을 토큰으로 또는 그 반대로 변환하는 구조와 함수가 있다.
5. 코드에는 argmax, 샘플링 및 top-p 샘플링과 같은 다양한 전략을 사용하여 확률을 기반으로 토큰을 샘플링하는 '샘플러' 구조와 함수가 포함된다.
6. 시간 측정을 위한 유틸리티 기능과 Transformer 모델을 기반으로 텍스트를 생성하는 '생성' 기능을 정의한다.
7. 마지막으로 트랜스포머 모델을 사용하여 사용자와 어시스턴트 간의 대화를 시뮬레이션하는 '채팅' 기능을 정의한다.  
전체 프로그램 구조도

앞에서 사용된 1.5GB가 넘는 스토리 학습 데이터의 구조는 다음과 같이 되어 있다.
학습 데이터 구조 일부

이를 본인의 목적에 맞게 적절히 데이터를 준비한 후, 다음과 같이 동일한 방식으로 학습하면 가중치 벡터가 저장된 bin파일을 얻을 수 있다. 이를 이용해, 앞서 언급된 방식과 동일하게 사용하면 된다.

llama.cpp 윈도우 버전 설치 및 사용법
빌드 및 설치
NVIDIA 드라이버, 컴파일러 등 설치되었다고 가정하고 진행한다. 윈도우 버전 llama.cpp 빌드를 위해서는 visual studio 2022 버전을 설치해야 한다. 

그리고, 터미널에서 다음 순서대로 진행한다.

1. "Developer Command Prompt for VS 2022" 실행
2. git clone https://github.com/ggml-org/llama.cpp.git
3. Navigate to your llama.cpp folder (cd F:\projects\tools\llama.cpp).
4. cmake -B build -DGGML_CUDA=ON

CMake를 사용하여 `build` 폴더를 성공적으로 구성(Configure)하셨다면, 이제 실제로 코드를 컴파일하고 실행 파일(.exe)을 생성하는 빌드(Build) 단계를 진행해야 한다. `cmake -B build` 명령어는 "설정(Configure)"만 한 것이고, 실제 빌드는 다음 명령어로 수행한다. 

5. cmake --build build --config Release

`--build build`: 아까 생성한 `build` 디렉토리를 타겟으로 빌드를 수행한다.
`--config Release`: 성능 최적화를 위해 반드시 Release 모드로 빌드해야 한다. (이 옵션을 안 주면 기본값인 Debug 모드로 빌드되어 실행 속도가 매우 느리다.) 


빌드가 완료되면 실행 파일들은 `build` 폴더 안의 특정 경로에 생성된다.

예를 들면, `F:\projects\tools\llama.cpp\build\bin\Release` 일 것이고, 이곳에 `llama-cli.exe`, `llama-quantize.exe`, `llama-server.exe` 등이 생성되었는지 확인한다.

CPU 코어 수가 많다면 병렬 빌드를 사용하여 속도를 높일 수 있다. 싱글모드에서는 빌드에 최소 한두시간 걸릴 수 있다.
cmake --build build --config Release --parallel 4

실행 및 사용하기
생성된 실행 파일이 GPU(CUDA)를 제대로 인식하는지 확인하려면 `llama-cli.exe`를 실행해 본다.
build\bin\Release\llama-cli.exe -h

경로가 위와 다를 경우, `dir /s /b *.exe` 명령어로 파일 위치를 찾는다.
실행 시 로그 출력 중 "CUDA" 또는 "GGML_CUDA=1"과 같은 문구가 포함되어 있는지 확인하면 된다.

이제 빌드된 `llama-cli.exe`를 사용하여 모델 파일을 로드하고 실행한다.

이제 'qwen2.5:7b-instruct' 모델을 사용하여 테스트할 차례이다. 'llama.cpp'로 Qwen 모델을 실행하려면 모델 파일이 '.gguf' 형식이어야 한다.

1. 모델 파일 준비 (GGUF 형식)
'llama.cpp'는 GGUF 형식의 모델 파일만 지원한다. HuggingFace에서 'Qwen2.5-7B-Instruct-GGUF' 모델을 다운로드해야 한다.

Qwen/Qwen2.5-7B-Instruct-GGUF(https://huggingface.co/Qwen/Qwen2.5-7B-Instruct-GGUF) 접속
'q4_k_m.gguf' 같은 파일을 다운로드하여 'F:\projects\tools\llama.cpp\models' 폴더(없으면 생성)에 저장

2. GPU 가속을 활용한 모델 실행
GPU를 사용하여 모델을 로드하려면 '-ngl' (number of gpu layers) 옵션을 사용해야 한다. 7B 모델은 대부분 GPU 메모리에 들어간다.

.\build\bin\Release\llama-cli.exe -m F:\projects\tools\llama.cpp\models\qwen2.5-7b-instruct-q3_k_m.gguf -ngl 99 -c 2048 -p "안녕? 자기소개 해줘." 
'-m': 모델 파일 경로
'-ngl 99': 모든 레이어를 GPU(CUDA)에 할당합니다. (GPU 메모리가 부족하다면 숫자를 30, 50 등으로 낮추세요.)
'-c 2048': 컨텍스트 윈도우 크기입니다.
'-p': 프롬프트 내용입니다.
정상 실행 결과
GPU 사용 체크

3. 테스트 체크리스트

1. CUDA 로그 확인: 실행 직후 로그에 'ggml_cuda_init: GGML_CUDA_DLL_PATH = ...', 'GGML_CUDA: Found 1 CUDA devices'와 같은 메시지가 뜨는지 확인. 이게 떠야 GPU를 쓰고 있는 것.
2. 성능 확인: 'eval time' 및 'sample time' 항목에서 'tokens per second' 수치를 확인. CPU만 사용할 때보다 훨씬 빠른 속도가 나와야 정상.
3. 메모리 확인: 모델이 로딩될 때 작업 관리자의 GPU 메모리(VRAM) 점유율이 올라가는지 확인.

만약 실행 시 "CUDA error"가 발생하거나 "Out of memory"가 뜬다면, GPU 메모리가 부족한 것이므로 '-ngl' 값을 줄여서(예: '-ngl 20') 다시 시도해 보시기 바란다.

서버 실행 방법
'llama-server'는 모델을 로드하여 로컬 API 서버(OpenAI API 호환)로 만들어준다. 이렇게 하면 웹 UI나 다른 프로그램에서 API 호출을 통해 모델을 사용할 수 있다.

1단계: 서버 실행 명령어 구성
'llama-cli'와 마찬가지로 '-ngl' 옵션을 통해 GPU 가속을 반드시 포함해야 한다.
터미널(빌드된 경로 'build\bin\Release' 또는 'llama.cpp' 루트)에서 아래 명령어를 실행한다.

.\build\bin\Release\llama-server.exe -m F:\projects\tools\llama.cpp\models\qwen2.5-7b-instruct-q3_k_m.gguf -ngl 99 --port 8080 --host 0.0.0.0

'-ngl 99': 모델을 최대한 GPU VRAM에 로딩.
'--port 8080': 서버가 실행될 포트.
'--host 0.0.0.0': 외부 접속을 허용 (로컬에서만 쓸 거면 생략 가능). 

2단계: 서버 상태 확인
명령어를 실행하면 로그가 쭉 올라갑니다. 마지막 부분에 다음과 비슷한 내용이 나오면 서버가 정상적으로 뜬 것이다.

llama_model_load: ...
...
HTTP server listening at 0.0.0.0:8080

이제 브라우저를 열고 'http://localhost:8080'에 접속해 본다. 'llama.cpp' 자체적으로 제공하는 내장 웹 UI가 나타나며, 여기서 바로 채팅 테스트가 가능하다.

3단계: API 테스트 (Python 예시)
'llama-server'는 OpenAI API 규격을 따르기 때문에, Python에서 'openai' 라이브러리로 쉽게 연동할 수 있다.

from openai import OpenAI

# 서버가 8080 포트에서 실행 중일 때
client = OpenAI(
    base_url="http://localhost:8080/v1",
    api_key="not-needed" # 로컬이므로 아무 값이나 입력
)

response = client.chat.completions.create(
    model="Qwen2.5",
    messages=[
        {"role": "user", "content": "Qwen 2.5 모델에 대해 설명해줘."}
    ]
)

print(response.choices[0].message.content)

4단계: 트러블슈팅 및 팁
  • GPU 사용 확인: 서버가 실행되는 동안 터미널 로그를 보면 '[llama.cpp] ... CUDA ...' 같은 문구가 보일 것이다. 만약 속도가 매우 느리다면 모델 전체가 VRAM에 로드되지 않은 것이니, '--gpu-layers' (또는 '-ngl') 설정을 다시 확인한다.
  • 메모리 관리: 서버는 모델을 메모리에 계속 올려두고 대기한다. 모델 사용이 끝나면 터미널에서 'Ctrl + C'를 눌러 서버를 확실히 종료하여 GPU VRAM을 회수하라.
  • 컨텍스트 최적화: 서버 구동 시 '-c 4096' 또는 '-c 8192' 옵션을 추가하여 컨텍스트 윈도우를 조정할 수 있다 (모델의 최대 지원 길이에 맞춰 설정).

레퍼런스

2024년 3월 13일 수요일

오픈소스 기반 프로젝트 문서, 버전 및 지식 관리 도구 소개

이 글은 무료로 사용할 수 있는 오픈소스 기반 프로젝트 문서, 버전, 지식 관리 도구들을 조사하고, 이를 간략히 나눔한다. 일부는 github에 공개되어 있어, 이를 잘 이용하면, 프로젝트 작업 프로세스에 통합 등을 할 수 있다.

프로젝트 문서 관리 도구 예시

웹 기반 파일 폴더 관리 도구
이 도구는 MIT라이센스에 따라 출시된 파일 관리자이다. 드래그앤드롭을 지원하며, AWS S3, 위지윅 편집기, 웹 기반 UI 지원한다. 

이 도구는 파일 관리 UI를 제공해, 파일 업로드, 삭제, 미리보기, 이름변경 및 편집을 지원하다. 독립 실행형 앱으로 사용할 수 있다.
이 도구는 SFTP, FTP, S3, GIT, LDAP, MYSQL등 지원하는 웹 파일 관리자이다. 이 도구는 인증, 공유, 미디어 재생 등을 지원한다. 모바일 친화적이고, 플러그인으로 확장이 가능하다.
웹용 파일 관리자이다. 직접 웹사이트 개발이 가능하다. 리눅스, 윈도우, 맥을 지원하고, 로컬 혹은 온라인 실행 가능하다. PHP5로 개발되었다.

서버 모든 폴더를 관리할 수 있는 웹 기반 PHP 파일 관리자이다. 웹 브라우저 기반 파일, 폴더 저장, 업로드 및 관리할 수 있다. PHP 5.5+ 로 개발되었다. 
React 기반 웹 브라우저 파일 관리 도구이다. 드래그앤드롭, 미리보기, 그리드 파일 보기 등을 지원한다. 
이 도구는 파일, 폴더를 관리하는 호스팅 웹 도구이다. 이 도구는 관리자, 사용자에게 개별 접근 권한, 역할을 부여할 수 있다. 대용량 파일 업로드를 지원한다.
이 도구는 Flask 서버를 사용해 WiFi, Internet 기반 파일 탐색 도구이다. 컴퓨터 전체 폴더를 탐색하고, 모든 파일을 다운로드 할 수 있다. 브라우저에서 비디오, 오디오 파일을 스트리밍할 수 있다.

문서 관리 시스템
파이썬 기반 Django를 사용해 개발된 문서 관리 시스템이다. 이 도구는 인텔, 대학 등 많은 기업에서 사용된다. 문서 워크플로 정의 기능을 지원한다.
이 도구는 클라우드 파일 공유 도구로, 멀티 플랫폼을 지원하며, 모바일도 지원한다. 백업, 복구 옵션이 있으며, 클라이언트 간 파일 동기화, 파일 잠금, 로깅, 암호화 등을 지원한다. 라즈베리파이에 설치 가능하다. 

NextCloud
이 도구는 모듈식으로 개발된 클라우드 파일 공유 도구로 GDPR를 준수하며, DICOM(Medical Imaging) 뷰어 앱을 제공한다. 이런 이유로, 의료 분야에 많이 사용된다. 이 도구로 부터 OwnCloud가 파생 개발되었다. 

실시간 협업, 버전 관리, 사용자 접근 관리, 문서 미리보기 및 승인, 워크플로 지원, 검색 등을 지원한다. 

자체 호스팅 지원하는 문서 관리 도구로, PHP로 개발되었고, 설치가 쉽다. 

Java로 개발된 도구이며, 기업용 오픈 소스 문서 관리 시스템이다. 

자체 호스팅을 지원하는 문서 관리 도구로, PHP로 개발되었다. MySQL을 사용하며, 파일 검토, 알림, 만료, 로깅, 리비전 기록 등을 지원한다. 메타 데이터 검색을 지원한다. 

버전 및 형상관리 
이 도구는 소스 분산 버전 관리 도구이다. 로컬 분기, 스테이징, 워크플로 등을 지원한다. 

소스 형상 관리 도구로 널리 사용되고 있다. 파일 및 문서 기록을 남기 있고, 여러 개발자가 동시 개발이 가능하다. 

멀티 플랫폼 지원하는 형상 관리 도구이다. 가볍고, 파이썬 애드온 등을 지원한다.

크로스 플랫폼을 지원하며, 부분 체크인, 아웃을 제공한다. 중앙 서버 유무에 관계없이 사용할수 있다.


지식 관리 도구
OpenKM은 스캔 이미지를 포함한 전자 문서를 저장, 추적, 관리 지원하는 지식관리 시스템이다. 대량 업로드, 오피스 추가 기능 등을 제공한다.
이 도구는 내외부 문서를 중앙 집중화하여, 정보를 검색하고, 문서에 레이블을 지정해 분류하는 데 도움을 준다.
이 도구는 팀, 지식을 연결하는 기능을 제공한다. 프로젝트 협업 시 유용한 기능을 제공한다.
이 도구는 고객의 질문, 답변을 관리해 지식 창고를 구축할 수 있는 기능을 제공한다. 

다음은 각 도구의 장단점을 보여준다.

쉐어포인트 대용 오픈소스 도구
이 도구는 사용자화 가능한 프로젝트 협업 메뉴를 제공한다. 쉐어포인트와 유사하게 동작하며, 문서 기반 협업이 용이하다. 워크플로, 아이디어 교환 등 기능을 제공한다.

이 도구는 Atlassian에서 개발한 협업 도구로, 중앙화된 작업 공간, 팀 작업 지원, 지식관리, 프로젝트 협업 등을 지원한다. 

이 도구는 메시징 기반 프로젝트 협업 도구로, 커뮤니케이션, 보이스 및 비디오 콜, 파일 공유, 작업 추적 등을 지원한다.

Jostle
이 도구는 인트라넷 서비스를 제공하여, 단순한 UI, 일정 공유, 파일 공유, 팀 협업, 조직도, 비디오 콜 등을 제공한다. 
전략 계획, 프로젝트 관리, 협업을 지원하는 도구로, KPI 추적, 리포트 생성, BSC 관리 등을 제공한다. 
이 도구는 프로젝트 관리, 비용 관리, 작업 추적 등을 지원한다. 

Classubes
이 도구는 세어포인트와 유사 기능을 제공하여, 문서 관리, 인트라넷, 일정 관리, 협업 등을 제공한다. 
이 도구는 협업 기능을 제공하며, 문서 기반 관리를 제공한다. 파일 공유, 작업 관리, 사용자화가 가능하다.

마무리
이외 다음과 같은 오픈소스 기반 문서 관리 도구가 있으니, 참고하기를 바란다. 
레퍼런스

오픈소스 기반 프로젝트 관리 및 공통 데이터 개발 환경 도구 소개

이 글은 오픈소스 기반 프로젝트 관리 및 공통 데이터 개발 환경 도구를 소개한다.

여기서, 평판이 좋은 5가지 오픈 소스 프로젝트 관리 도구를 공유한다. 

OpenProject는 기본 작업에서 복잡한 애자일 방법론 및 팀에 이르기까지 모든 것을 지원할 수 있는 다목적 프로젝트 관리 시스템이다. 이 플랫폼이 무료로 자체 호스팅되거나 OpenProject 서버에서 호스팅될 수 있다는 것이다.

OpenProject는 애자일 보드(칸반 보드), 사용하기 쉬운 Gantt 차트 및 기본 채팅, 위키 및 포럼, 문서 관리, 무제한 파일 업로드(최대 256MB 파일) 및 회의 도구를 포함하는 강력한 팀 협업 도구 세트 덕분에 애자일 프로젝트 관리(올바른 계획 포함)에 좋다. 기본 시간 추적 도구도 있다.

Redmine은 매우 기본적이고 오래된 프로젝트 관리 도구처럼 보이다. 그러나 시간을 보내고 나면 소프트웨어 개발 팀에 이상적인 소프트웨어가 강력하고 프로젝트 관리, 버그 추적 등에 사용할 수 있다. 

Redmine은 무제한 프로젝트와 사용자를 지원하며 간단한 Gantt 차트, 캘린더 및 개요 도구를 제공한다. 생성하는 각 프로젝트에 대한 위키가 있으며 파일 공유, 리소스 관리 및 프로젝트 뉴스를 지원한다. 

Redmine은 전체 조직에서 사용할 수 있는 수많은 플러그인이 있다.

플러그인 디렉토리에서 리소스 관리 및 커뮤니케이션 도구, 대시보드, CRM, 예산 책정 및 비용 관리 솔루션, 수많은 프로젝트를 지원하는 데 도움이 되는 워크플로 도구, 파일 스토리지 지원 등에 대한 지원을 찾을 수 있다. 

Leantime은 마일스톤, 보고서, 시간 추적 및 통합과 같은 사용하기 쉬운 작업 관리 도구를 제공한다.

Leantime은 칸반 보드, 목록 및 Gantt 차트를 포함한 여러 보기를 제공한다. 이러한 도구를 사용하면 프로젝트 마감일을 설정하고, 진행 상태를 추적하고, 하위 작업 및 종속 관계를 만들고, 완료된 프로젝트를 쉽게 확인할 수 있다. 중요한 정보를 표시하는 프로젝트 대시보드도 있다. 보안 관점에서 호스팅된 멤버십을 통한 2단계 인증을 찾을 수 있다.

관리자와 팀 구성원이 함께 모여 프로젝트를 설계하는 데 도움이 될 수 있는 프로젝트 청사진을 작성할 수 있다. 아이디어 보드(또는 아이디어 칸반 보드)를 통해 토론을 할 수 있으며, 회고 보드를 통해 팀은 프로젝트 중에 잘된 아이디어와 실패한 아이디어에 대해 논의할 수 있다.

이 소프트웨어는 또한 작업 카드를 통해 파일을 쉽게 채팅하고 공유할 수 있도록 한다. 

이 소프트웨어는 칸반 보드와 간트 차트를 잘 제공한다. 모든 계획은 무제한의 작업을 허용한다. 기본 플랜은 3개의 프로젝트만 허용하지만 유료 플랜은 무제한 프로젝트를 제공한다. 이메일 지원, 전용 앱, 시간 추적 및 팀 협업 도구가 표준으로 제공된다. 

통합을 좋아한다면 Pro 플랜에서 Slack, GitHub, Google 및 기타 여러 Zapier와 통합할 수 있다. 계획에 따라 자동화, 보고서, 비공개 프로젝트, 고급 관리 및 보안 기능도 있다. 간단한 프로젝트를 추적하는 데 도움이 필요하거나 스크럼 방법론을 활용하려는 경우 MeisterTask가 할 수 있다.

MeisterTask는 기본 Windows 및 macOS 앱은 물론 iPhone, Android 기기 및 Apple Watch용 앱을 제공하는 유일한 플랫폼이다. 

Freedcamp는 칸반 보드, Gantt 차트, 테이블(스프레드시트) 및 작업 목록에 대한 액세스를 제공한다. 팀 협업 및 시간 추적 도구와 마일스톤 지원이 있다. 또한 위키, 통합, 인보이스 발행 도구 등과 같은 프로젝트 관리 도구에 다양하게 액세스할 수 있다.

다른 많은 오픈 소스 프로젝트 관리 시스템과 달리 Freedcamp는 탐색하고 상호 작용하기 쉬운 사용자 친화적인 인터페이스를 가지고 있다. 

Freedcamp의 핵심 버전은 사용자가 한 플랫폼을 다른 플랫폼과 통합하고 자동화를 생성할 수 있는 Zapier 플랫폼과 호환됩니다.

레퍼런스

2024년 3월 11일 월요일

유용한 Django GUI 차트 및 데쉬보드 라이브러리 소개

이 글은 유용한 Django GUI 라이브러리를 소개하는 글이다. 
장고는 파이썬 기반 웹 앱 개발 지원 프레임웍으로 매우 강력한 기능을 지원한다. 이 글은 장고 기반 웹 앱 개발 시 사용할 수 있는 유용한 GUI 라이브러리를 살펴본다. 

이 도구는 웹 기반 차트 등 생성을 제공한다. 다양한 데이터소스를 제공해, 이를 사전 정의된 테마, 다양한 차트를 통해 웹에 렌더링할 수 있다.

150개 이상의 반응형 그래프, 차트를 지원하는 이 도구는 대화형 방식의 GUI를 제공한다. MySQL 서버에서 가져온 데이터를 이용해 즉각적인 차트를 생성한다. 사용자 입력에 대한 이벤트를 지원하고, 실시간으로 차트를 추가할 수 있다. 
간트 차트 등 그래프 생성을 지원한다. 이 도구는 매우 다양한 차트를 제공하는 highcharts를 기반으로 개발되었다. 

SaaS지원을 위한 분석 도구, 데쉬보드 등 지원한다. 

Bootstrap 4 lite 기반 템플릿을 사용해, 높은 품질의 데쉬보드, 맵 패널 등을 제공한다. 

Bootstrap 5 기반으로 커스터마이징 가능한 데쉬보드를 제공한다. 

Material Dashboard
이 도구는 타임 시리즈 데이터를 데쉬보드로 가시화하는 데 유용하다. 부트스트랩 기반으로 개발되었으며, 다양한 테마를 제공한다. 

기타, 장고에는 DB 객체 맵핑 도구인 ORM, 다중 파일 업로드를 지원하는 ModelForm와 같은 강력한 기능을 기본으로 제공한다. 

레퍼런스

2024년 3월 5일 화요일

UniVision: 시각 중심 3D 인식을 위한 통합 프레임워크

3D 인식 모델은 많은 구조적 및 개념적 유사성을 공유하지만 기능 표현, 데이터 형식 및 목표에는 여전히 격차가 존재하여 통합되고 효율적인 3D 인식 프레임워크 설계에 어려움을 겪고 있다. 

이 기술은 비전 중심 3D 인식의 두 가지 주요 작업인 점유 예측과 객체 감지를 통합하는 간단하고 효율적인 프레임워크인 UniVision을 제시한다. 구체적으로 우리는 보완적인 2D-3D 특징 변환을 위한 명시적-암시적 뷰 변환 모듈을 제안한다. 우리는 효율적이고 적응적인 복셀 및 BEV 특징 추출, 향상 및 상호 작용을 위한 로컬-글로벌 특징 추출 및 융합 모듈을 제안한다.

다중 작업 프레임워크 훈련의 효율성과 안정성을 가능하게 하는 공동 점유 감지 데이터 증대 전략과 점진적인 손실 가중치 조정 전략을 제안한다. nuScenes LiDAR 세분화, nuScenes 감지, OpenOccupancy 및 Occ3D를 포함한 4가지 공개 벤치마크에서 다양한 인식 작업에 대한 광범위한 실험을 수행한다. UniVision은 각 벤치마크에서 각각 1.5mIoU, 1.8NDS, 1.5mIoU, 1.8mIoU 이득으로 최첨단 결과를 달성했다.  


레퍼런스