Llama3を動かしてみる

準備

下記、URLのダウンロードページから、必要な項目を入力して、「Specify custom URL」を入手しておく。

https://www.llama.com

前回、Llama2を動かしてみるでLlama2を動かしたが、今回はLlama3を動かしてみる。

ダウンロード

pip install llama-stack
llama model list

表示されたリストから「Llama-3.2-1B-Instruct」等、ダウンロードするモデル名をMODEL_IDに指定して下記のコマンドを実行する。

llama model download --source meta --model-id MODEL_ID

実行中、下記の様に表示されたら、事前に入手した「Specify custom URL」を貼り付ける。

Please provide the signed URL for model Llama-3.2-1B you received via email after visiting https://www.llama.com/llama-downloads/ (e.g., https://llama3-1.llamameta.net/*?Policy...): 

実行

torch等、実行に必要なモジュールをインストールする。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install fairscale fire blobfile

実行例をGithubからCloneして取得する。

git clone https://github.com/meta-llama/llama-models.git

llama-modelsのscriptsフォルダに入っているexample_chat_completion.pyを実行する。

CHECKPOINT_DIR=~/.llama/checkpoints/Meta-Llama3.2-1B-Instruct
torchrun llama-models/models/scripts/example_chat_completion.py $CHECKPOINT_DIR

実行結果(例)

User: what is the recipe of mayonnaise?

> Assistant: The classic recipe of mayonnaise! Here's a simple and traditional recipe to make mayonnaise at home:

**Ingredients:**

* 2 large egg yolks
* 1 tablespoon lemon juice or vinegar (white wine, apple cider, or white distilled vinegar)
* 1/2 cup (120 ml) neutral-tasting oil, such as canola, grapeseed, or light olive oil
* Salt, to taste (optional)

**Instructions:**

1. **Separate the egg yolks**: Crack 2 large egg yolks into a medium-sized bowl.
2. **Whisk the egg yolks**: Whisk the egg yolks with a fork until they become light and frothy.
3. **Add the lemon juice or vinegar**: Whisk in 1 tablespoon of lemon juice or vinegar to help stabilize the emulsion.
4. **Slowly add the oil**: While continuously whisking the egg yolks, slowly pour in the oil in a thin, steady stream. Start with a very slow pour and gradually increase the flow as the mixture thickens.
5. **Whisk until smooth**: Continue whisking until the mixture becomes thick, creamy, and emulsified. This should take about 5-7 minutes, depending on the temperature and whisking speed.
6. **Season with salt (optional)**: If desired, add a pinch of salt to taste.
7. **Taste and adjust**: Give the mayonnaise a taste and adjust the seasoning if needed.

**Tips and Variations:**

* **Use room temperature ingredients**: This will help the emulsion form more easily.
* **Don't over-whisk**: Stop whisking once the mixture thickens and becomes smooth. Over-whisking can lead to a separated or broken mayonnaise.
* **Add flavorings**: Try adding minced garlic, chopped herbs (e.g., parsley, dill, or chives), grated ginger, or other flavorings to create different variations.
* **Use different oils**: Experiment with different oils, such as truffle oil, chili oil, or infused oils, to create unique flavor profiles.
* **Make ahead**: Mayonnaise can be made ahead and refrigerated for up to 1 week. Give it a good stir before using.

**Troubleshooting:**

* **Separation**: If the mayonnaise separates, don't worry! Simply whisk in a little more oil

VSCODEで実行する場合

pip install accelerate

huggingface形式に変換するため、GithubからtransformersをCloneする。

git clone https://github.com/huggingface/transformers.git

huggingface形式に変換する。

python transformers/src/transformers/models/llama/convert_llama_weights_to_hf.py \
 --input_dir /mnt/e/Work/Llama3/checkpoints/Llama3.2-1B \
 --model_size 1B --llama_version 3.2 \
 --output_dir /mnt/e/Work/Llama3/checkpoints/Llama3.2-1B-hf

コードサンプル

import transformers
import torch

model = "/mnt/e/Work/Llama3/checkpoints/Llama3.2-1B-hf"

pipeline = transformers.pipeline(
    "text-generation",
    model=model,
    torch_dtype=torch.float16,
    device_map="auto",
)

sequences = pipeline(
    'I have tomatoes, basil and cheese at home. What can I cook for dinner?\n',
    do_sample=True,
    top_k=10,
    num_return_sequences=1,
    truncation = True,
    max_length=400,
)

for seq in sequences:
    print(f"Result: {seq['generated_text']}")

Jenkinsの起動構成をカスタマイズする

前提

  • Ubuntu 24.04.1
  • aptでインストール

問題点

jenkins.service内で、port番号などを変更していると、apt upgradeで更新するたびに、元に戻ってしまう。

解決策

sudo systemctl edit jenkins
又は、
sudo vi /etc/systemd/system/jenkins.service.d/override.conf
を使う。

参考手順

以下の手順でJenkinsをインストールする。

sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.key

echo "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" https://pkg.jenkins.io/debian-stable binary/ | sudo tee /etc/apt/sources.list.d/jenkins.list > /dev/null

sudo apt update
sudo apt upgrade
sudo apt install jenkins

Apacheと連携するように設定する。

sudo a2enmod proxy
sudo a2enmod proxy_http
sudo vi /etc/apache2/sites-available/jenkins.conf

ProxyPass         /jenkins  http://localhost:8080/jenkins nocanon
ProxyPassReverse  /jenkins  http://localhost:8080/jenkins
ProxyRequests     Off
AllowEncodedSlashes NoDecode

<Proxy http://localhost:8080/jenkins*>
  Order deny,allow
  Allow from all
</Proxy>

jenkins.confを有効にして、Apacheを再起動する。

sudo a2ensite jenkins.conf
sudo systemctl restart apache2

Jenkinsの起動構成を変更する。

sudo systemctl edit jenkins

又は、

sudo vi /etc/systemd/system/jenkins.service.d/override.conf

先ほど設定したApacheのURLと合うように、JENKINS_PREFIX=/jenkinsとする。

[Unit]
Description=Jenkins Controller

[Service]
Environment="JENKINS_PREFIX=/jenkins"

Jenkinsを再起動する。

sudo systemctl restart jenkins

Tomcat 10からTomcat 11にアップグレードする

動作環境

動作環境はTomcat 10と変わらなかった。

Jakarta EE

Jakarta EEのサポートバージョンが変わっている。
一部抜粋:参考
Tomcat 11
 Servlet 6.1
 JSP 4.0
 EL 6.0
 Java 17 and later

Tomcat 10
 Servlet 6.0
 JSP 3.1
 EL 5.0
 Java 11 and later

javax.*からjakarta.*に移行が済んでいれば、基本的にはプログラム変更なしで動くはず。

変更する場合

Tomcat 11のサポートバージョンにプログラムを書き換えてみる。

Web.xml

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_1.xsd"
  version="6.1">

pom.xml

Servlet 、JSPのバージョンをpom.xmlで指定することはそう無いと思う。

ELについては、Hibernate Validator 8.0で、Eclipse Expressly 5.0を使用しているので、jakarta.el-api 5.0が必要(Expresslyの依存関係に含まれている)になる。

Hibernate Validator 9.0であれば、jakarta.el-apiは6.0となるが、まだベータ版の段階である。

原神のスクリーンショット保存先のフォルダを変更する(PC版)

動機

  • スクリーンショットのフォルダが原神のインストールフォルダ下にあるのは、何かと不便
  • OneDriveフォルダにスクリーンショットを保存して、自動的にバックアップが取れるようにしたい

結論

原神にはスクリーンショットの保存場所を変更する機能がないため、Windowsのシンボリックリンク機能を使用して、保存場所を移動する。

以下手順

  1. 原神のインストールフォルダにあるScreenShotフォルダをOneDrive管理下のフォルダに移動する。
  2. スタートボタンの検索に「cmd」と入力し、コマンド プロンプトが表示されたら、右クリックメニューを開き、「管理者として実行」をクリックする。

  3. コマンド プロンプトで下記コマンドを入力しシンボリックリンクを作成する。
1. 原神のインストールフォルダに移動する。
例)※インストール先の確認方法は後述
cd C:\Games\HoYoverse\Genshin Impact game

2. シンボリックリンクを作成する。
mklink /d ScreenShot 上記手順1でスクリーンショットを移動したフォルダ/ScreenShot

3. 下記の様に表示されたら作成成功。
ScreenShot <<===>> 上記手順1でスクリーンショットを移動したフォルダ/ScreenShot のシンボリック リンクが作成されました

※原神のインストール先の確認方法

HoYoPlayのゲーム設定をクリックする。

基本情報の下に表示されているフォルダがインストール先

Ubuntu Server 24.04 LTSをインストールする

インストール用ISOファイルをダウンロード

https://jp.ubuntu.com/download

インストール用ISOファイルをUSBメモリに展開

ダウンロードしたISOファイルを展開してUSBメモリに書き込む。

自分はUSBWriterを使用。

USBメモリから起動しインストール

基本はデフォルトで設定し、以下項目だけ変更した。

  • 静的IPの設定
  • Open SSHのインストール

SSHで繋いで環境構築

sudo apt update
sudo apt upgrade
sudo reboot

Webminのインストール

curl -o setup-repos.sh https://raw.githubusercontent.com/webmin/webmin/master/setup-repos.sh
sudo sh setup-repos.sh
sudo apt install --install-recommends webmin

その他

 →Ubuntu Server 22.04 LTSをインストールする
 →Ubuntu Proを使ってみる

Windows 11で休止状態を無効にし、hiberfil.sys を削除する

デスクトップPCに休止状態の設定はいらないだろうということで、無効にする。管理者権限でコマンドプロンプトを開き下記のコマンドを実行する。

powercfg.exe -h off

無効にすると自動的にhiberfil.sysが削除される。自分の環境ではCドライブの空き容量が64GB増えた。

xsdのURLは正しいのにEclipseのエディタ上でエラーになる

xsdのURLは正しいのにDownloading external resources is disabled.と表示されてエラーになっている。

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"

下記の設定を変更することで解決した。

Mavenの設定の「Download Artifact Javadoc」にチェックを入れる。

XML (Wild Web Developer)の設定の「Download external resources like referenced DTD, XSD」にチェックを入れる。

Hibernate Searchを7.2にアップデートしたらNoSuchMethodErrorが発生した

Hibernate Searchを7.2.1にアップグレードして、テストを実施したら下記のエラーが発生した。

NoSuchMethodError: 'java.lang.Object org.jboss.logging.Logger.getMessageLogger

コンパイルエラーにはなっていないが、テスト時のログ出力でエラーとなった。

他のライブラリとの依存関係の影響で、jboss-logging 3.5系を使用するようになっていた。3.6.0.Finalを使用するようにpom.xmlに依存関係を追記したところ、エラーは解消した。

<dependency>
    <groupId>org.jboss.logging</groupId>
    <artifactId>jboss-logging</artifactId>
    <version>3.6.0.Final</version>
</dependency>

Gradleの場合も同様。

implementation 'org.jboss.logging:jboss-logging:3.6.0.Final'

Vueのアップグレードでエラー

どのバージョンで変わったか定かではないのだけど、アップグレード後エラーになって起動しなくなった。

変更点

vue.config.jsのエラーメッセージ

 ERROR  SyntaxError: Cannot use import statement outside a module
E:\Work\wtp\workspace\crawler-client\vue.config.js:1
import { defineConfig } from '@vue/cli-service'

import fromをrequireに変更した。

const { defineConfig } = require('@vue/cli-service')

babel.config.jsのエラーメッセージ

 ERROR  SyntaxError: Unexpected token 'export'
E:\Work\wtp\workspace\crawler-client\babel.config.js:1
export const plugins = {

export const pluginsをmodule.exportsに変更した。

module.exports = {
  presets: [
    '@vue/cli-plugin-babel/preset'
  ]
}

PostgreSQLをダウンロードして、データベースを作成する

テスト用のユーザーと、テスト用のデータベースを作成して、実行する。

PostgreSQLのダウンロード

Zipファイルをダウンロードし、解凍する。

https://www.enterprisedb.com/download-postgresql-binaries

データベースクラスタの作成

データベース等の保存先になるフォルダを指定する。

PostgreSQLインストールフォルダ\bin\initdb.exe -D "任意フォルダ"

起動

PostgreSQLを起動する。

PostgreSQLインストールフォルダ\bin\pg_ctl.exe start -D "データベースクラスタのフォルダ" -l "任意フォルダ\ログファイル名"

以降、起動状態で作業する。

ユーザー作成

パスワード有りで、ユーザーを作成する。

PostgreSQLインストールフォルダ\bin\createuser -P testuser

データベース作成

先ほど作成したユーザーをオーナーに指定しデータベースを作成する。

PostgreSQLインストールフォルダ\bin\createdb -O testuser testdb

終了

PostgreSQLを終了する。

PostgreSQLインストールフォルダ\bin\pg_ctl.exe stop -D "データベースクラスタのフォルダ" -l "任意フォルダ\ログファイル名"