Ollamaを試す

以前にllama.cppを試して便利だなーとか思って、ちょっと時間が経ったら、langchainでOllamaというのを使っていたので、試してみたら、結構便利だった。

いろいろなLLMをAPIなどでも実行できるようにしてくれる。起動も簡単。Dockerも提供されているので、それを利用することにする。モデルを保存するディレクトリとして、ollamaディレクトリを事前に作っておくとして、起動自体は以下でできる。

docker run -d -v ./ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama

GPUを利用する場合は、–gpus=allも-dの次あたりに追加して実行すればOK。

たとえば、llama2を利用したい場合は、まず、モデルをダウンロードしておく。

docker exec -it ollama ollama pull llama2

利用可能なモデルはここに使用メモリサイズなどの情報とかと一緒に書いてある。

コマンド実行で試して見るなら、以下を実行すると試すことができる。

$ docker exec -it ollama ollama run llama2
>>> Why is the sky blue?

The sky appears blue because of a phenomenon called Rayleigh scattering, which occurs when sunlight passes through the Earth's atmosphere. The atmosphere contains tiny molecules of gases such as nitrogen 
and oxygen, which scatters the light in all directions.
...

後は、APIでのアクセスも提供されているが、ここに一通り書いてある。以下のようにアクセスすると結果が取得できる。

$ curl http://localhost:11434/api/generate -d '{
  "model": "llama2",
  "stream": false,
  "prompt": "Why is the sky blue?"
}'

EmbeddingのAPIもあるので、いろいろなことができそうではある。

あとは、Modelfileなどを作成すると、カスタマイズしたモデルを登録できるようなので、カスタマイズが必要になったら使えそうです。

という感じで、手軽にローカルでLLMを試すことができる感じになってきました。

jacoco.execが生成されない

pom.xmlにjacocoを追加したものの、実行してみると

[INFO] Skipping JaCoCo execution due to missing execution data file.

みたいな感じのメッセージが表示され、jacocoが実行されない。target/jacoco.execが生成されていないためなのだが、これが起きる原因としては、surefireの設定が関係している場合がある。たとえば、pom.xmlのsurefire設定で

<argLine>${test.command.args}</argLine>

という感じで設定していると、jacocoの引数が渡されなくなるようなので、

<argLine>@{argLine} ${test.command.args}</argLine>

という感じに変更すると解決する。

Tomcat 10.1でJSTLを利用する

最近、JSPを利用する人も少ないためか、JSTLをTomcatで使うための情報がなさそうな雰囲気でもあるので、メモがてらにポイントを書いておく。

まずは依存関係に入れるJARファイルですが、Mavenであれば以下の感じで追加する。

    <dependency>
      <groupId>jakarta.servlet.jsp.jstl</groupId>
      <artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
      <version>3.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>jakarta.servlet.jsp.jstl</artifactId>
      <version>3.0.1</version>
    </dependency>

jakarta.servlet.jsp.jstlが実装なので、これを入れないと動かない。(これでちょっとハマりました…) なので、後者の方を入れないと以下のようなエラーが出ます。

Caused by: org.apache.jasper.JasperException: /WEB-INF/view/index.jsp (line: [1], column: [1]) Unable to find taglib [c] for URI: [jakarta.tags.core]

JARファイルを依存関係に追加しておけば、あとは、taglibの宣言も

<%@taglib prefix="c" uri="jakarta.tags.core"%>

のような感じで、http://〜で指定したuriがjakarta.tags.〜に変わってます。これも書き変えておきます。

この辺を対応すれば、Tomcatの以前のバージョンからも移行できると思います。(javaxからjakartaパッケージにいろいろと変えるという大きな作業はあるとは思いますが…)