分类: 未分类

  • 探索 JBang——Java 开发的全新体验

    前言

    Java 开发者们,无论您是学生、教育者还是专业开发人员,您是否曾经希望有一种更简单、更高效的方式来创建、编辑和运行 Java 程序?今天,我们将带您了解一个令人兴奋的工具——JBang。它不仅简化了 Java 应用的开发过程,还提供了丰富的功能和广泛的支持平台。

    什么是 JBang?

    JBang 是一个旨在让学生、教育者和专业开发人员能够轻松地创建、编辑和运行自包含的源代码 Java 程序的工具。借助 JBang,您可以在几乎任何操作系统上无缝地运行 Java 程序,而且无需复杂的设置过程。

    多平台支持

    安装与运行

    JBang 可以安装并运行在 Windows、Linux、macOS、Docker 以及 GitHub Actions 上。此外,它还可以通过 Maven 和 Gradle 插件使用。这意味着无论您使用什么开发环境,都可以轻松集成 JBang。

    无需预装 Java

    如果您的系统上没有安装 Java,JBang 也能自动下载所需的 Java 版本。这极大地简化了初学者的上手过程。

    嵌入式依赖管理

    自动获取依赖

    通过 JBang,您可以直接在源代码中使用 //DEPS group:artifact:version@Grab 注解来自动获取任何依赖项。这使得依赖管理变得前所未有的简单和直接。

    //DEPS org.slf4j:slf4j-api:1.7.30
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    public class HelloWorld {
        private static final Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    
        public static void main(String[] args) {
            logger.info("Hello, World!");
        }
    }

    JBang AppStore

    JBang 提供了一个 AppStore,您可以在其中找到其他人发布的应用程序,或者将您自己的应用程序发布到一个由 git 支持的 jbang-catalog.json 中。这为开发者提供了一个共享和发现工具的平台。

    发布与发现应用

    通过 JBang AppStore,您可以轻松地发现和使用其他开发者发布的应用程序,也可以发布自己的应用程序供其他人使用。这种共享机制促进了开发者之间的交流和协作。

    IDE 集成

    无论您使用的是 Intellij、Eclipse、Visual Studio Code、Apache Netbeans,还是 vim 和 emacs,JBang 都能轻松集成。它提供了适当的内容辅助和调试支持,使得开发过程更加流畅和高效。

    轻松编辑与调试

    JBang 提供了丰富的编辑和调试支持,让您在熟悉的开发环境中也能享受到 JBang 带来的便利。无论是代码补全、语法高亮还是调试功能,JBang 都能很好地与您的 IDE 集成。

    选择合适的 Java 版本

    JBang 支持从 Java 8 及更高版本的任何 Java 版本。您可以根据项目需求自由选择最合适的 Java 版本,享受最新的语言特性和性能提升。

    灵活的版本支持

    无论是需要使用 Java 8 的老项目,还是想要尝试最新的 Java 版本,JBang 都能满足您的需求。这种灵活性使得 JBang 成为一个非常适合多种场景的工具。

    用户体验

    很多用户都对 JBang 的使用体验表示赞赏。正如 Oliver Weiler 所说:“第一次使用 JBang 的体验真的很棒!你可以感觉到 @jbangdev 是用爱在做这件事!”

    社区反馈

    通过社交媒体和开发者社区,许多用户分享了他们的使用体验和心得。JBang 的用户友好性和强大的功能得到了广泛的认可和赞誉。

    总结

    JBang 为 Java 开发者提供了一种全新的开发体验。无论是简化的依赖管理、多平台支持、无缝的 IDE 集成,还是便捷的 AppStore,JBang 都展示了其强大的功能和极高的可用性。如果您还没有尝试过 JBang,现在就是开始的好时机!

    欲了解更多信息并下载 JBang,请访问 JBang 官方网站


    参考文献:

    JBang 官方网站

  • 在纯Java文件中推理Llama 2

    在现代人工智能领域,推理大型语言模型(LLM)已经成为一个重要的应用场景。GitHub上的项目 mukel/llama2.java 提供了一种使用纯Java代码进行Llama 2推理的简洁实现。本文将详细介绍该项目的背景、构建方法及性能表现。

    背景介绍

    Llama 2是由Andrej Karpathy开发的一个非常简单的LLM推理实现。该项目的Java版本旨在提供教育价值,并用于在JVM上测试和调整编译器优化,特别是针对Graal编译器的优化。这一Java移植版本最初参考了llama2.scala。

    构建与运行

    要构建和运行该项目,您需要Java 21+,特别是其中的MemorySegment mmap-ing功能。以下是具体的构建步骤:

    1. 下载必要的文件: wget https://github.com/karpathy/llama2.c/raw/master/tokenizer.bin wget https://huggingface.co/karpathy/tinyllamas/resolve/main/stories15M.bin
    2. 手动构建与运行: javac --enable-preview -source 21 --add-modules=jdk.incubator.vector Llama2.java java --enable-preview --add-modules=jdk.incubator.vector Llama2 stories15M.bin
    3. 使用JBang直接运行: jbang Llama2.java stories15M.bin
    4. 使用Makefile和run.sh脚本: make # 可选,run.sh已经包含了make JAVA_HOME=GRAALVM_HOME \ JAVA_RUNTIME_OPTIONS=-Djava.util.concurrent.ForkJoinPool.common.parallelism=8 \ ./run.sh stories15M.bin</code></li> <!-- /wp:list-item --></ol> <!-- /wp:list -->  <!-- wp:heading --> <h2 class="wp-block-heading">生成本地镜像</h2> <!-- /wp:heading -->  <!-- wp:paragraph --> 使用GraalVM可以创建一个独立的本地镜像: <!-- /wp:paragraph -->  <!-- wp:code --> <pre class="wp-block-code"><code>JAVA_HOME=GRAALVM_HOME NATIVE_IMAGE_OPTIONS="-march=native" make native-image ./llama2 stories15M.bin

      或者使用Profile-Guided Optimizations (PGO):

      JAVA_HOME=GRAALVM_HOME \ NATIVE_IMAGE_OPTIONS="--pgo-instrument -march=native --initialize-at-build-time=Llama2 -Dllama2.VectorAPI=false" \ make native-image  # 生成默认的iprof配置文件 ./llama2 -Djava.util.concurrent.ForkJoinPool.common.parallelism=0 stories15M.bin  # 构建优化后的镜像 JAVA_HOME=GRAALVM_HOME \
      NATIVE_IMAGE_OPTIONS="--pgo -march=native --initialize-at-build-time=Llama2 -Dllama2.VectorAPI=false" \
      make native-image
      
      # 优化后的运行速度应该比普通镜像快约2倍
      ./llama2 stories15M.bin

      性能表现

      以下是该项目在不同配置下的性能测试结果(基于AMD Ryzen 3950X 64GB,Arch Linux):

      单线程测试

      模型每秒处理Token相对于llama2.c的加速实现
      stories15M.bin3631.0llama2.c
      stories15M.bin2370.65llama2.java
      stories110M.bin51.711.0llama2.c
      stories110M.bin42.200.81llama2.java
      llama2_7B.bin0.921.0llama2.c
      llama2_7B.bin0.880.95llama2.java

      多线程测试

      模型每秒处理Token相对于llama2.c的加速实现
      stories15M.bin12331.0llama2.c
      stories15M.bin4380.35llama2.java
      stories110M.bin901.0llama2.c
      stories110M.bin800.88llama2.java
      llama2_7B.bin1.681.0llama2.c
      llama2_7B.bin1.650.98llama2.java

      需要注意的是,Java版本在多线程情况下的性能提升并不显著,这主要是由于内存带宽限制所致。

      结论

      mukel/llama2.java项目展示了如何使用纯Java代码实现Llama 2推理,并在一定程度上达到了与原始C实现相当的性能。尽管当前版本的性能尚未完全优化,但其作为教育工具和编译器优化测试平台已经展现出巨大潜力。

      参考文献:GitHub – mukel/llama2.java

人生梦想 - 关注前沿的计算机技术 acejoy.com 🐾 步子哥の博客 🐾 背多分论坛 🐾 借一步网
Page Stats: PV: 7240 | UV: 3593
Last updated: 2025-07-05 03:35:33
沪ICP备2024052574号-1