Jlama 是一個基於 Java 的推理引擎,適用於 huggingface 上的許多文字到文字模型:Llama 3+、Gemma2、Qwen2、Mistral、Mixtral 等。
它旨在用於將 gen ai 整合到 java 應用程式中,就是可以透過它將 LLM 推理直接新增到您的 Java 應用程式。
- Jlama 使用 Panama 向量 API 在 CPU 上進行快速推理,因此非常適合小型模型。
- 較大的模型可以在分散式模式下執行,該模式按層和/或注意力頭對模型進行分片。
它與langchain4j 整合 幷包含與 OpenAI 相容的 rest api。
它支援 Q4_0 和 Q8_0 量化並使用safetensor格式的模型。預量化模型在我的[url=https://huggingface.co/tjake]huggingface[/url]頁面 上維護, 但您可以使用 jlama cli 在本地量化模型。
非常容易安裝,並且在 Linux/Mac/Windows 上執行良好
#Install jbang (or https://www.jbang.dev/download/) curl -Ls https://sh.jbang.dev | bash -s - app setup
#Install Jlama CLI jbang app install --force jlama@tjake
# Run the openai chat api and UI on a model jlama restapi tjake/Llama-3.2-1B-Instruct-JQ4 --auto-download
|
模型支援:
- Gemma & Gemma 2 型號
- Llama & Llama2 & Llama3 模型
- Mistral 和 Mixtral 模型
- Qwen2 模型
- GPT-2 模型
- BERT 模型
- BPE 標記器
- WordPiece 標記器
實現:
- 分頁關注
- 專家匯聚
- 工具呼叫
- 生成嵌入
- 分類器支援
- Huggingface SafeTensors模型和 tokenizer 格式
- 支援F32、F16、BF16型別
- 支援Q8、Q4模型量化
- 快速 GEMM 操作
- 分散式推理!
Jlama 需要 Java 20 或更高版本,並利用新的Vector API 進行更快的推理。如何在 Java 專案中使用
Jlama 的主要目的是提供一種在 Java 中使用大型語言模型的簡單方法。
在您的應用程式中嵌入 Jlama 的最簡單方法是使用Langchain4j 整合。
如果您想嵌入不帶 langchain4j 的 Jlama,請將以下maven依賴項新增到您的專案中:
<dependency> <groupId>com.github.tjake</groupId> <artifactId>jlama-core</artifactId> <version>${jlama.version}</version> </dependency>
<dependency> <groupId>com.github.tjake</groupId> <artifactId>jlama-native</artifactId> <!-- supports linux-x86_64, macos-x86_64/aarch_64, windows-x86_64 Use https://github.com/trustin/os-maven-plugin to detect os and arch --> <classifier>${os.detected.name}-${os.detected.arch}</classifier> <version>${jlama.version}</version> </dependency>
|
jlama 使用 Java 21 預覽功能。您可以透過以下方式全域性啟用這些功能:export JDK_JAVA_OPTIONS="--add-modules jdk.incubator.vector --enable-preview"
或者透過配置 maven 編譯器和 failsafe 外掛來啟用預覽功能。
然後您可以使用 Model 類來執行模型:
public void sample() throws IOException { String model = "tjake/Llama-3.2-1B-Instruct-JQ4"; String workingDirectory = "./models";
String prompt = "What is the best season to plant avocados?";
//下載模型,如果已經下載,則只返回本地路徑 File localModelPath = new Downloader(workingDirectory, model).huggingFaceModel(); // 載入量化模型並指定使用量化記憶體 AbstractModel m = ModelSupport.loadModel(localModelPath, DType.F32, DType.I8);
PromptContext ctx; // 檢查模型是否支援聊天提示,併為該模型新增預期格式的提示 if (m.promptSupport().isPresent()) { ctx = m.promptSupport() .get() .builder() .addSystemMessage("You are a helpful chatbot who writes short responses.") .addUserMessage(prompt) .build(); } else { ctx = PromptContext.of(prompt); }
System.out.println("Prompt: " + ctx.getPrompt() + "\n"); //生成對提示的響應並列印 // 應用程式允許流式或非流式響應 // 生成的響應溫度為 0.7,最大令牌長度為 256 Generator.Response r = m.generate(UUID.randomUUID(), ctx, 0.0f, 256, (s, f) -> {}); System.out.println(r.responseText); }
|