Zenn
📘

Second MeをWindowsで動かす onWSL2

に公開

Second Meとは

自分の知識・思い出・思考回路を元に「自分のクローン」を作るローカルLLM
ローカル内で動かすので漏洩の心配もいらない
公式LP / 公式GitHub

現状、macOSのみを対象(Docker化は検討しているらしいので乞うご期待...)
Windowsホストでは厳しいのでWSL2で動かす。
version: Ubuntu 24.04.1 LTS

重要

【2025/04/01追記】 公式がDockerサポートしました!
この記事では、未対応だったときのソースを想定しているので、新しく試す方はこちらを参考にしてください
https://github.com/mindverse/Second-Me/issues/130

前提

  • WSL2が構築済みであること
  • Miniconda、zshがインストール済みであること

流れ

macOSであれば、makeコマンドでサクっと構築できるが、WSLなのでいくつか考慮しないといけない

  • macOSでないと弾く処理がある
  • macOS固有のコマンドがある
  • Homebrew+caskでパッケージをインストールしている

このあたりを考慮しながら進めていきます。
参考Issue

手順

1. プロジェクトをClone

git clone git@github.com:Mindverse/Second-Me.git

2. macOS特有のコマンドなどをコメントアウト

下記はすべてsetup.shファイル内のコードです。
コメントアウトと記載しているところを修正してください。

check_system_requirements関数
check_system_requirements() {
    ...省略...

    # Check if running on macOS
    # コメントアウト: mac OSでなければエラーを返す処理
    # if [[ "$(uname)" != "Darwin" ]]; then
    #     log_error "This script only supports macOS"
    #     return 1
    # fi
    
    # コメントアウト: mac OS 14(macOS Sonoma)以上かチェックする処理 -> sw_versが使えないため
    # local macos_version=$(sw_vers -productVersion)
    # log_info "Detected macOS version: $macos_version"
    
    # local major_version=$(echo "$macos_version" | cut -d. -f1)
    # if [[ "$major_version" -lt 14 ]]; then
    #     log_error "This script requires macOS 14 (Sonoma) or later. Your version: $macos_version"
    #     return 1
    # fi

    ...省略...
}
check_potential_conflicts関数
check_potential_conflicts() {
    ...省略...
    
    # Check Homebrew installation
    # コメントアウト: Homebrewのインストール処理 -> Homebrewは使わないので
    # if command -v brew &>/dev/null; then
    #     log_info "Homebrew is installed"
    # else
    #     log_warning "Homebrew is not installed, attempting to install it automatically..."
        
    #     # Only use local copy of the Homebrew install script
    #     local homebrew_script="${SCRIPT_DIR}/../dependencies/homebrew_install.sh"
    #     local brew_installed=false
        
    #     if [[ -f "$homebrew_script" ]]; then
    #         log_info "Using local Homebrew install script"
    #         if /bin/bash "$homebrew_script"; then
                
    #             # Add Homebrew to PATH for the current session
    #             if ! add_homebrew_to_path; then
    #                 log_error "Homebrew installed but couldn't be added to PATH"
    #                 return 1
    #             fi
                
    #             # Verify Homebrew is actually installed and working
    #             if command -v brew &>/dev/null; then
    #                 log_success "Homebrew installed successfully"
    #             else
    #                 log_error "Homebrew installation failed: brew command not found in PATH"
    #                 return 1
    #             fi
    #         fi
    #     else
    #         log_error "Local Homebrew install script not found at: $homebrew_script"
    #         log_error "Please ensure the Homebrew install script exists in the dependencies folder."
    #         return 1
    #     fi
    # fi
    
    # Check Conda installation
    if command -v conda &>/dev/null; then
        log_info "Conda is installed"
    else
        # コメントアウト: condaコマンドが使えるかのチェック
        # condaが使えない場合、brew + caskでインストールしようとしているが、Ubuntuだと使えないため
        # log_warning "Conda is not installed, attempting to install it automatically..."
        # # Check if Homebrew is available now
        # if command -v brew &>/dev/null; then
        #     if ! install_conda; then
        #         log_error "Failed to install Conda automatically"
        #         return 1
        #     fi
        # else
        #     log_error "Cannot install Conda: Homebrew is required but not available"
        #     return 1
        # fi
    fi
    
    return 0
}
setup_npm関数
setup_npm() {
    log_step "Setting up npm package manager"
    
    # Check if npm is already installed
    log_info "Checking npm installation..."
    if ! command -v npm &>/dev/null; then
        log_warning "npm not found - installing Node.js and npm"
        # コメントアウト: nodeとnpmのインストール処理 -> brewは使わないため
        # if ! brew install node; then
        #     log_error "Failed to install Node.js and npm"
        #     return 1
        # fi
        
        # # Verify npm was installed successfully
        # if ! command -v npm &>/dev/null; then
        #     log_error "npm installation failed - command not found after installation"
        #     return 1
        # fi
        # log_success "Successfully installed Node.js and npm"
    else
        log_success "npm is already installed"
    fi
    
    ...省略...
}
check_and_install_cmake関数
check_and_install_cmake() {
    log_step "Checking for cmake installation"
    
    if ! command -v cmake &>/dev/null; then
        log_warning "cmake is not installed, attempting to install it automatically..."
        if command -v brew &>/dev/null; then
            log_info "Installing cmake using Homebrew..."
            # コメントアウト: cmakeのインストール処理 -> brewは使わないため
            # if ! brew install cmake; then
            #     log_error "Failed to install cmake using Homebrew"
            #     return 1
            # fi
            log_success "cmake installed successfully"
        else
            log_error "Cannot install cmake: Homebrew is required but not available"
            return 1
        fi
    else
        log_info "cmake is installed"
    fi
    
    return 0
}

3. パッケージのインストール

本来brewで入れるはずだったパッケージなどを手動でインストールします。

sudo apt-get update
sudo apt-get install -y make nodejs npm cmake unzip sqlite3

4. セットアップ

下記コマンドでセットアップを行ってください。

make setup

おそらくエラーが出ると思います。
しかし、condaの仮想環境は作成されているはずですので、下記コマンドで「second-me」という表示があれば次に進んでください。

conda info -e

5. Conda仮想環境立ち上げ

make setup内でも仮想環境をアクティブにしていますが、Makefileでは各行が別々のシェルで実行されるため、そのままでは仮想環境が引き継がれません。
その結果、ホスト環境でパッケージを探してしまい「パッケージが見つからない」というエラーが発生します。
なので、一度手動で仮想環境(conda環境)をアクティブにしてからmake setupを実行するようにします。
これで、すべて仮想環境下で処理が行われ、上記のエラーを回避できます。

conda activate second-me

6. 再度セットアップ

make setup

時間はかかりますが、今度は上手くいったはずです。

7. 起動

make start

http://localhost:3000にアクセスすると...

トラブルシューティング メモ

DB関連エラー

make start実行時にデータベースの初期化処理が行われ、一度DBが作成されると以降の起動ではマイグレーションが行われない仕様になっています。
そのため、もしmake startが途中で失敗し、その後の起動でDBエラーが発生する場合(※logs/start.logでエラー内容を確認可能)、data/sqlite/lpm.dbを削除してから再度make startを実行してみてください。
これによりデータベースの初期化が再び実行され、エラー解消するはずです。

所感

これ以降の手順は、他の方の記事と同様なので割愛します。

トレーニングの際に、データ合成サポートモデルを選ぶ必要があり、OpenAIのAPIキーを準備する必要があります。
学習データの量にもよるとは思いますが、私の場合は0.3ドル程度かかりました。
ベースモデルはQwen2.5-0.5B-Instruct (8GB+ RAM Recommended)を使用しました。

学習後の使用感としては、正直イマイチで、記憶は学習されていますが誤った解釈をしている箇所が多々ありました。
もっと大きいモデルだったら精度高くなったかもしれませんが...
一応、日本語でも会話はできます。

性能面は今後確実に上がると思いますので、今後に期待します。

「クローンにネットの海から情報収集させて、それをオリジナルに、オリジナルが咀嚼しやすい形でマージする未来」や、「クローンにコミュニケーション業務を一任させて、自分は最終判断のみ」みたいな未来になったら面白いですね。
巷の汎用LLMにはできない、自分の思考回路を模倣するクローンLLMだからこそできることだと思います。

公式の紹介動画も面白いので見てみてください👋
https://www.youtube.com/watch?v=KWuvf884YEI

Discussion

ログインするとコメントできます