🦙 Jlama: 一个现代化的Java推理引擎
🚀 功能
模型支持:
- Gemma模型
- Llama & Llama2 & Llama3模型
- Mistral & Mixtral模型
- GPT-2模型
- BERT模型
- BPE分词器
- WordPiece分词器
实现:
- Flash Attention
- 专家的混合
- Huggingface SafeTensors 模型和分词器格式
- 支持F32、F16、BF16类型
- 支持Q8、Q4模型量化
- 快速GEMM操作
- 分布式推理!
Jlama需要Java 20或更高版本,并使用新的 Vector API 以实现更快的推理。
⭐ 给我们一个星!
喜欢你所看到的?请考虑给我们一个星星(★)!
🤔 它用于什么?
将LLM推理直接添加到你的Java应用程序中。
🔬 演示
如果你只是想与llm聊天,Jlama包含一个简单的UI。
./run-cli.sh download tjake/llama2-7b-chat-hf-jlama-Q4
./run-cli.sh restapi models/llama2-7b-chat-hf-jlama-Q4
打开浏览器访问 http://localhost:8080/
👨💻 如何在你的Java项目中使用
使用Jlama最简单的方法是通过 Langchain4j集成
Jlama还包括一个 OpenAI聊天完成API ,可用于AI生态系统中的许多工具。
./run-cli.sh restapi tjake/llama2-7b-chat-hf-jlama-Q4
如果你想直接嵌入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>
<!-- 支持linux-x86_64, macos-x86_64/aarch_64, windows-x86_64
使用 https://github.com/trustin/os-maven-plugin 检测操作系统和架构 -->
<classifier>${os.detected.name}-${os.detected.arch}</classifier>
<version>${jlama.version}</version>
</dependency>
然后你可以使用Model类来运行模型:
public void sample() throws IOException {
String model = "tjake/TinyLlama-1.1B-Chat-v1.0-Jlama-Q4";
String workingDirectory = "./models";
String prompt = "种植牛油果的最佳季节是什么?";
// 下载模型或如果模型已下载则返回本地路径
File localModelPath = SafeTensorSupport.maybeDownloadModel(workingDirectory, model);
// 加载量化模型并指定使用量化内存
AbstractModel m = ModelSupport.loadModel(localModelPath, DType.F32, DType.I8);
// 检查模型是否支持聊天提示并按该模型预期的格式添加提示
if (m.promptSupport().isPresent()) {
prompt = m.promptSupport().get().newBuilder()
.addSystemMessage("你是一个会写短回答的有帮助的聊天机器人。")
.addUserMessage(prompt)
.build();
}
System.out.println("提示: " + prompt + "\n");
// 生成对提示的响应并打印出来
// API允许流式或非流式响应
// 响应的生成温度为0.7,最大令牌长度为256
GenerateResponse r = m.generate(UUID.randomUUID(), prompt, 0.7f, 256, false, (s, f) -> System.out.print(s));
System.out.println(r.toString());
}
🕵️♀️ 如何用作本地客户端
Jlama包含一个CLI工具,通过 run-cli.sh
命令运行模型。
在此之前,首先从huggingface下载一个或多个模型。
使用 ./run-cli.sh download
命令从huggingface下载模型。
./run-cli.sh download gpt2-medium
./run-cli.sh download -t XXXXXXXX meta-llama/Llama-2-7b-chat-hf
./run-cli.sh download intfloat/e5-small-v2
然后运行CLI工具与模型聊天或完成一个提示。
量化支持使用 -q
标志。或者你可以使用位于我的huggingface仓库中的预量化模型。
./run-cli.sh complete -p "起床的最好部分是" -t 0.7 -tc 16 -q Q4 -wq I8 models/Llama-2-7b-chat-hf
./run-cli.sh chat -s "你是一位专业的喜剧演员" models/llama2-7b-chat-hf-jlama-Q4
🧪 示例
Llama 2 7B
你: 讲个关于猫的笑话。要包含表情符号。
Jlama: 当然,这里有一个笑话给你:
为什么猫会参加乐队?🎸🐱
因为他想成为完美的鼓手!😹🐾
我希望你觉得这个笑话非常有趣!😸🐱
耗时: 11秒,每个令牌提示38.0毫秒,生成146.2毫秒
你: 再来一个
Jlama: 当然!这里有另一个笑话:
为什么猫带着一团毛线参加聚会?🎉🧶
因为他想举办一个派对!😹🎉
希望这个笑话能让你笑!😊🐱
耗时: 11秒,每个令牌提示26.0毫秒,生成148.4毫秒
🗺️ 路线图
- 支持更多的模型
添加纯Java分词器支持量化(例如k-量化)- 添加LoRA支持
- GraalVM支持
添加分布式推理
🏷️ 许可证和引用
该代码根据 Apache许可证 提供。
如果你发现这个项目对你的研究有帮助,请引用下面的出处
@misc{jlama2024,
title = {Jlama: 一个用于大型语言模型的现代Java推理引擎},
url = {https://github.com/tjake/jlama},
author = {T Jake Luciani},
month = {January},
year = {2024}
}