Microsoft의 추론 프레임워크는 1비트 대형 언어 모델을 로컬 장치에 제공합니다.

Date:

1비트 LLM 및 Microsoft의 BitNet.cpp 프레임워크 이해

2024년 10월 17일, 마이크로소프트가 BitNet.cpp를 발표했습니다.1비트 양자화된 LLM(대형 언어 모델)을 실행하도록 설계된 추론 프레임워크입니다. BitNet.cpp는 Gen AI에서 상당한 진전을 이루었으며 값비싼 GPU 없이도 표준 CPU에 1비트 LLM을 효율적으로 배포할 수 있습니다. 이 개발은 LLM에 대한 액세스를 민주화하여 다양한 장치에서 사용할 수 있게 하고 장치 내 AI 애플리케이션에 새로운 가능성을 제공합니다.

1비트 대형 언어 모델 이해

LLM(대형 언어 모델)은 모델 가중치에 고정밀 부동 소수점 숫자(일반적으로 FP16 또는 BF16)를 사용하기 때문에 전통적으로 상당한 계산 리소스가 필요했습니다. 이러한 필요성으로 인해 LLM 배포는 비용이 많이 들고 에너지 집약적이었습니다.

기본적으로 1비트 LLM은 극도의 양자화 기술을 사용하여 -1, 0, 1의 세 가지 가능한 값만 사용하여 모델 가중치를 표현하므로 “1.58비트”라는 용어가 사용됩니다(3개를 인코딩하려면 1비트보다 약간 더 필요함). 상태).

3원 웨이트 시스템

개념

BitNet.cpp의 1비트 양자화는 3항 가중치 시스템입니다. BitNet은 각 매개변수에 대해 세 가지 가능한 값으로만 ​​작동합니다.

  • -1 (부정적인)
  • 0 (중립적)
  • 1 (긍정적인)

이로 인해 매개변수당 약 1.58비트의 저장 요구사항이 발생합니다. 비트넷 b1.58. 매개변수 비트 폭의 이러한 급격한 감소는 대부분의 부동 소수점 곱셈이 간단한 덧셈과 뺄셈으로 대체되므로 메모리 사용량과 계산 복잡성이 크게 감소합니다.

수학 기초

1비트 양자화에는 다음 단계를 통해 가중치와 활성화를 삼항 표현으로 변환하는 작업이 포함됩니다.

1. 가중치 이진화

가중치를 이진화하는 것은 평균을 중심으로 가중치를 집중시키는 것을 포함합니다(α), 삼항 표현이 생성됩니다. 변환은 수학적으로 다음과 같이 표현됩니다.

에프=징후(에이)

어디:

  • 원래의 가중치 행렬입니다.
  • 에이 가중치의 평균입니다.
  • 부호(x) 보고 +1 만약에 x > 0 그리고 -1 그렇지 않으면.

2. 활성화 양자화

양자화 활성화는 입력이 지정된 비트 폭으로 제한되도록 보장합니다.

어디:

  • Qb = 2(b−1)2^{(b-1)} 에 대한 최대 양자화 수준입니다. -비트 너비.
  • 기음 의 최대 절대값이다 엑스 (로 표시 ∣∣x∣∣무한대).
  • 이자형 계산 중 오버플로를 방지하기 위해 작은 숫자입니다.

3. 비트선형 연산

BitLinear 레이어는 전통적인 행렬 곱셈을 단순화된 연산으로 대체합니다.

와이=에프×엑스^이자형×(기음)

어디:

  • 근사 오류를 최소화하는 데 사용되는 스케일링 계수입니다.
  • 기음 활성화 규모를 조정합니다.
  • Q_b 양자화 인자입니다.

이러한 변환을 통해 모델 성능을 유지하면서 효율적인 계산이 가능해집니다.

성능에 미치는 영향

메모리 효율성

삼원 가중치 시스템은 메모리 요구 사항을 크게 줄입니다.

  • 전통적인 LLM: 무게당 16비트
  • 비트넷.cpp: 무게당 1.58비트

이러한 감소로 인해 대략적으로 메모리가 절약됩니다. 90% 기존 16비트 모델과 비교하여 더 큰 모델을 동일한 하드웨어 제약 조건에 맞출 수 있습니다.

에너지 효율성

추론 속도, 에너지 효율성(Apple M2)

추론 속도: 두 CPU 모두에서 더 빠릅니다.

추론 속도, 에너지 효율성(i7-13700H)

1. 추론 속도: 두 CPU 모두에서 더 빠릅니다.

추론 속도 초당 처리되는 토큰 수로 표시됩니다. 관찰 내용은 다음과 같습니다.

  • Apple M2 Ultra의 경우: BitNet.cpp는 최대 달성 5.07배 Llama.cpp와 비교하여 더 큰 모델(30B)의 속도 향상(최대 속도: 초당 593.43 토큰 125M 모델의 경우 1.37배 속도 향상. 3.8B 및 7B와 같은 대형 모델의 경우 BitNet.cpp는 초당 84.77 토큰 이상의 속도를 유지하여 규모 전반에 걸쳐 효율성을 보여줍니다.
  • 인텔 i7-13700H의 경우: BitNet.cpp는 훨씬 더 극적인 속도 향상을 달성합니다. 7B 모델 크기에서 BitNet.cpp는 놀라운 5.68배 속도 향상 Llama.cpp와 비교됩니다. 125M과 같은 소형 모델의 경우 초당 389.08 토큰이는 2.37배 Llama.cpp보다 빠릅니다.

2. 에너지 효율성: 엣지 디바이스의 판도를 바꾸는 요소

제공된 그래프에는 다음도 포함됩니다. 에너지 비용 비교이는 처리된 토큰당 에너지 소비가 크게 감소했음을 보여줍니다.

  • Apple M2 Ultra의 경우: BitNet.cpp의 에너지 절감 효과는 상당합니다. 700M 모델의 경우 에너지 55.4% 감소 Llama.cpp와 비교하여 토큰당 0.314~0.140. 이러한 추세는 더 큰 모델에서도 계속되며 70B 모델은 에너지 소비량 70.0% 감소.
  • 인텔 i7-13700H의 경우: BitNet.cpp가 제공하는 71.9% 에너지 절감 700M 모델의 경우 소비량이 1,367 에게 0.384. Llama.cpp의 70B 모델에 대한 에너지 데이터를 사용할 수 없지만 BitNet.cpp는 에너지 소비량과 함께 효율성을 유지합니다. 17.33 70B 모델의 경우

3. 사람이 읽는 속도 벤치마크를 넘어서다

이 그래프에서 가장 흥미로운 통찰력 중 하나는 인간의 독서 속도에 표시됨 초당 5-7개 토큰. 이 빨간색 선은 두 가지 구현, 특히 BitNet.cpp가 가장 큰 모델의 경우에도 인간의 읽기 속도를 편안하게 능가할 수 있음을 보여줍니다.

  • ~에 애플 M2 울트라BitNet.cpp는 모든 모델 크기에서 사람이 읽는 속도를 능가하며 가장 낮은 속도는 다음과 같습니다. 초당 8.67개 토큰 70B 모델의 경우
  • ~에 인텔 i7-13700H100B 모델은 여전히 초당 1.70토큰인간의 읽기 속도의 낮은 범위에 거의 닿는 반면 모든 소형 모델은 이 벤치마크를 능가합니다.

훈련 고려사항

STE(직접 추정기)

1비트 양자화는 미분 불가능한 함수를 도입하므로 훈련에는 다음과 같은 특수 기술이 필요합니다. STE(직접 추정기). 이 접근 방식에서는 기울기가 미분 불가능한 점을 통해 변경되지 않고 흐릅니다. 다음은 Python으로 단순화된 구현입니다.

class StraightThroughEstimator(Function):    @staticmethod    def forward(ctx, input):        return input.sign()    @staticmethod    def backward(ctx, grad_output):        return grad_output

혼합 정밀 훈련

훈련 중 안정성을 유지하기 위해, 혼합 정밀도 고용되었습니다 :

  • 가중치 및 활성화: 1비트 정밀도로 양자화됩니다.
  • 그라데이션 및 최적화 상태: 더 높은 정밀도로 저장됩니다.
  • 잠재 가중치: 훈련 중 정확한 업데이트가 가능하도록 높은 정밀도로 유지됩니다.

대규모 학습률 전략

1비트 모델의 고유한 문제는 작은 업데이트가 이진화된 가중치에 영향을 미치지 않을 수 있다는 것입니다. 이를 완화하기 위해 학습 속도를 높여 기존 접근 방식에 비해 더 빠른 수렴과 더 나은 최적화를 보장합니다.

그룹 양자화 및 정규화

BitNet.cpp 소개 그룹 양자화 및 정규화 모델 병렬성을 향상시킵니다. 전체 가중치 행렬에 대한 매개변수를 계산하는 대신 BitNet은 가중치와 활성화를 여러 그룹으로 나눕니다(G).

이러한 그룹화를 통해 추가적인 그룹 간 통신 없이 효율적인 병렬 처리가 가능하므로 대규모 모델 학습 및 추론이 가능합니다.

구현 참고 사항 및 최적화

CPU 최적화

BitNet.cpp는 여러 가지 낮은 수준 최적화를 활용하여 최고 CPU 성능을 달성합니다.

  • 벡터화된 작업: SIMD 명령어를 활용하여 비트 조작을 효율적으로 수행합니다.
  • 캐시 친화적인 메모리 액세스: 캐시 누락을 최소화하도록 데이터를 구조화합니다.
  • 병렬 처리: 여러 CPU 코어에 작업 부하를 효과적으로 분산합니다.

다음은 BitNet에서 양자화 및 추론을 구현하는 주요 기능의 예입니다.

 def bitlinear_forward(input, weight, scale):    # Quantize the input using absmax quantization    input_q = quantize(input)        # Perform binary matrix multiplication    output = binary_matmul(input_q, weight)        # Scale the output to match the original precision    return output * scaledef quantize(x):    # Perform absmax quantization    scale = torch.max(torch.abs(x))    return torch.clamp(x / scale, -1, 1) * scale

지원되는 모델

BitNet.cpp의 현재 릴리스는 다음을 지원합니다. Hugging Face에서 사용 가능한 1비트 LLM:

  • bitnet_b1_58-대형 (0.7B 매개변수)
  • bitnet_b1_58-3B (3.3B 매개변수)
  • Llama3-8B-1.58-100B-토큰 (8.0B 매개변수)

이러한 모델은 프레임워크의 추론 기능을 보여주기 위해 공개적으로 제공됩니다. Microsoft에서 공식적으로 교육하거나 출시하지는 않았지만 프레임워크의 다양성을 보여줍니다.

설치 가이드

BitNet.cpp를 시작하려면 다음 단계를 따르세요.

전제조건

  1. 파이썬 >= 3.9
  2. CMake >= 3.22
  3. 그 소리 >= 18
  4. 콘다 (강력히 추천)

을 위한 윈도우 사용자의 경우 Visual Studio는 다음 구성 요소를 활성화하여 설치해야 합니다.

  • C++를 사용한 데스크탑 개발
  • C++-Windows용 CMake 도구
  • 윈도우용 힘내
  • Windows용 C++-Clang 컴파일러
  • LLVM 도구 세트(Clang)에 대한 MS-Build 지원

을 위한 데비안/우분투 사용자의 경우 자동 설치 스크립트를 사용할 수 있습니다.

bash -c "$(wget -O - https://apt.llvm.org/llvm.sh)"

단계별 설치

  1. 저장소 복제:
    git clone --recursive https://github.com/microsoft/BitNet.git

    cd BitNet
  2. 종속성 설치:
    # Create a new Conda environment (recommended)
    conda create -n bitnet-cpp python=3.9
    conda activate bitnet-cpp


    pip install -r requirements.txt
  3. 프로젝트 빌드 및 준비: Hugging Face에서 직접 모델을 다운로드하여 양자화된 형식으로 변환할 수 있습니다.
    python setup_env.py --hf-repo HF1BitLLM/Llama3-8B-1.58-100B-tokens -q i2_s

    또는 모델을 수동으로 다운로드하고 변환합니다.

    huggingface-cli download HF1BitLLM/Llama3-8B-1.58-100B-tokens --local-dir models/Llama3-8B-1.58-100B-tokens

    python setup_env.py -md models/Llama3-8B-1.58-100B-tokens -q i2_s

BitNet.cpp를 사용하여 추론 실행

프레임워크를 사용하여 추론을 실행하려면 다음 명령을 사용합니다.

python run_inference.py -m models/Llama3-8B-1.58-100B-tokens/ggml-model-i2_s.gguf -p "Sandra journeyed to the kitchen. Where is Sandra?" -n 6 -temp 0.7

설명:

  • -m 모델 파일 경로를 지정합니다.
  • -p 프롬프트 텍스트를 정의합니다.
  • -n 예측할 토큰 수를 설정합니다.
  • -temp 추론 중에 샘플링 무작위성(온도)을 조정합니다.

출력 예

Sandra journeyed to the kitchen. Where is Sandra?

Answer: Sandra is in the kitchen.

BitNet.cpp의 기술적 세부사항

비트선형 레이어

BitNet.cpp는 표준 행렬 곱셈을 다음과 같이 대체하여 수정된 Transformer 아키텍처를 구현합니다. BitLinear 운영. 이 접근 방식은 양자화 전에 가중치를 0으로 중앙 집중화하고 가중치를 조정하여 근사치를 줄입니다. n 오류. 키 변환 함수는 다음과 같습니다.

# Binarization function for 1-bit weightsdef binarize_weights(W):    alpha = W.mean()    W_binarized = np.sign(W - alpha)    return W_binarized

중앙 집중식 가중치와 스케일링의 조합은 양자화 오류를 최소화하여 성능을 유지합니다.

산업 영향

BitNet.cpp는 LLM 배포에 광범위한 영향을 미칠 수 있습니다.

  • 접근성: LLM이 표준 장치에서 실행될 수 있도록 하여 강력한 AI에 대한 액세스를 민주화합니다.
  • 비용 효율성: 값비싼 GPU의 필요성을 줄여 채택 장벽을 낮춥니다.
  • 에너지 효율성: 표준 CPU 기반 추론을 활용하여 에너지를 절약합니다.
  • 혁신: 클라우드 종속성이 없는 실시간 언어 번역, 음성 지원, 개인 정보 보호 중심 애플리케이션 등 온디바이스 AI에 대한 새로운 가능성을 열어줍니다.

과제와 향후 방향

1비트 LLM이 유망하지만 몇 가지 과제가 남아 있습니다. 여기에는 다양한 작업을 위한 강력한 1비트 모델 개발, 1비트 계산을 위한 하드웨어 최적화, 개발자가 이 새로운 패러다임을 채택하도록 장려하는 것이 포함됩니다. 또한 컴퓨터 비전이나 오디오 작업을 위한 1비트 양자화를 탐색하는 것은 흥미로운 미래 방향을 나타냅니다.

결론

Microsoft의 BitNet.cpp 출시는 상당한 발전입니다. BitNet.cpp는 표준 CPU에서 효율적인 1비트 추론을 활성화함으로써 AI의 접근성과 지속 가능성을 창출합니다. 이 프레임워크는 보다 휴대성이 뛰어나고 비용 효율적인 LLM을 위한 기반을 마련하여 온디바이스 AI로 가능한 모든 것을 추진합니다.

게시물 Microsoft의 추론 프레임워크는 1비트 대형 언어 모델을 로컬 장치에 제공합니다. 처음 등장한 Unite.AI.

Share post:

Subscribe

Popular

More like this
Related

생성 AI 활용: 업계 리더를 위한 대담한 도전과 보상

조직이 AI의 잠재력을 계속 탐구함에 따라 Microsoft 고객은 워크플로를...

식품 안전 분야에서 AI의 필요성 증가

특히 광범위한 조류독감 발생의 영향이 농업 부문 전반에 걸쳐...

12월23일 정부지원사업 신규 공고 리스트 (12건) _ (파일 재가공/재배포 가능)

12월 23일 12건<12/23지원사업 신규 공고 목록> *전 영업일인 12/20에 올라온...

Waste Robotics와 Greyparrot가 분류 로봇을 강화하는 방법

Waste Robotics는 FANUC 로봇 팔을 사용하여 안정적이고 정확한 피킹을...