Floneum을 사용하면 로컬 미리 훈련 된 AI 모델을 사용하는 응용 프로그램을 쉽게 개발할 수 있습니다. 이 Monorepo에는 두 가지 주요 프로젝트가 있습니다.
Kalosm은 Floneum을 뒷받침하는 Rust의 미리 훈련 된 모델에 대한 간단한 인터페이스입니다. 사전 훈련, 언어, 오디오 및 이미지 모델과 쉽게 상호 작용할 수 있습니다.
Kalosm은 다양한 모델을 지원합니다. 다음은 현재 지원되는 모델 목록입니다.
| 모델 | 양식 | 크기 | 설명 | 양자화 | CUDA + 금속 가속 | 예 |
|---|---|---|---|---|---|---|
| 야마 | 텍스트 | 1B-70B | 범용 언어 모델 | ✅ | ✅ | llama 3 채팅 |
| 미스트랄 | 텍스트 | 7-13B | 범용 언어 모델 | ✅ | ✅ | 미스트랄 채팅 |
| 피 | 텍스트 | 2B-4B | 소규모 추론에 중점을 둔 언어 모델 | ✅ | ✅ | Phi 3 채팅 |
| 속삭임 | 오디오 | 20MB-1GB | 오디오 전사 모델 | ✅ | ✅ | 라이브 Whisper Transcription |
| rwuerstchen | 영상 | 5GB | 이미지 생성 모델 | ✅ | rwuerstchen 이미지 생성 | |
| 대주교 | 영상 | 3GB | 광학 문자 인식 모델 | ✅ | 텍스트 인식 | |
| 무엇이든 분류하십시오 | 영상 | 50MB-400MB | 이미지 분할 모델 | 이미지 분할 | ||
| 버트 | 텍스트 | 100MB-1GB | 텍스트 임베딩 모델 | ✅ | 시맨틱 검색 |
Kalosm은 또한 미리 훈련 된 모델 주변의 다양한 유틸리티를 지원합니다. 여기에는 다음이 포함됩니다.
Kalosm은 Candle Machine Learning Library를 사용하여 순수한 녹에서 모델을 실행합니다. llama.cpp 와 동등한 성능으로 양자화되고 가속화 된 모델을 지원합니다.
미스트랄 7b
| 촉진 신경 | 칼로스 | llama.cpp |
|---|---|---|
| 금속 (M2) | 39 t/s | 27 t/s |
Kalosm은 임의의 파서로 구조화 된 생성을 지원합니다. 맞춤형 파서 엔진 및 샘플러 및 구조 인식 가속도를 사용하여 제어되지 않은 텍스트 생성보다 구조 생성을 훨씬 빠르게 만듭니다. Rust 유형을 가져 와서 #[derive(Parse, Schema)] 추가하여 구조화 된 생성으로 사용할 수 있도록 할 수 있습니다.
use kalosm :: language :: * ;
/// A fictional character
# [ derive ( Parse , Schema , Clone , Debug ) ]
struct Character {
/// The name of the character
# [ parse ( pattern = "[A-Z][a-z]{2,10} [A-Z][a-z]{2,10}" ) ]
name : String ,
/// The age of the character
# [ parse ( range = 1 ..= 100 ) ]
age : u8 ,
/// A description of the character
# [ parse ( pattern = "[A-Za-z ]{40,200}" ) ]
description : String ,
}
# [ tokio :: main ]
async fn main ( ) {
// First create a model. Chat models tend to work best with structured generation
let model = Llama :: phi_3 ( ) . await . unwrap ( ) ;
// Then create a task with the parser as constraints
let task = Task :: builder_for :: < [ Character ; 10 ] > ( "You generate realistic JSON placeholders for characters" )
. build ( ) ;
// Finally, run the task
let mut stream = task . run ( "Create a list of random characters" , & model ) ;
stream . to_std_out ( ) . await . unwrap ( ) ;
let character = stream . await . unwrap ( ) ;
println ! ( "{character:?}" ) ;
}Regex 외에도 구조화 된 데이터를 생성하기 위해 자체 문법을 제공 할 수 있습니다. 이를 통해 JSON, HTML 및 XML과 같은 복잡한 데이터 구조를 포함하여 원하는 구조에 대한 응답을 제한 할 수 있습니다.
이 QuickStart는 간단한 챗봇으로 실행할 수 있습니다. 시작합시다!
Kalosm에 대한보다 완전한 안내서는 Kalosm 웹 사이트에서 제공되며 예제는 예제 폴더에서 제공됩니다.
cargo new kalosm-hello-world
cd ./kalosm-hello-world # You can use `--features language,metal`, `--features language,cuda`, or `--features language,mkl` if your machine supports an accelerator
cargo add kalosm --features language
cargo add tokio --features fullmain.rs 파일에 추가하십시오 use kalosm :: language :: * ;
# [ tokio :: main ]
async fn main ( ) -> Result < ( ) , Box < dyn std :: error :: Error > > {
let model = Llama :: phi_3 ( ) . await ? ;
let mut chat = Chat :: builder ( model )
. with_system_prompt ( "You are a pirate called Blackbeard" )
. build ( ) ;
loop {
chat . add_message ( prompt_input ( " n > " ) ? )
. to_std_out ( )
. await ? ;
}
}cargo run --release두 프로젝트에 관심이 있으시면 Discord에 가입하여 프로젝트를 논의하고 도움을받을 수 있습니다.