Safie Engineers' Blog!

Safieのエンジニアが書くブログです

マルチモーダルLLMをllama.cppとMiniCPMでローカル環境に実装する

はじめに

こんにちは。 セーフィー株式会社 先行開発Gの井上です。 今回は、タイトルの通り llama.cpp を使用して MiniCPM-o-2_6 をローカル環境で動作させる方法について解説します。ローカルでの動作環境を簡単に構築できる手順を紹介しますので、ぜひ参考にしてください。

最近のマルチモーダルAIの発展に伴い、ローカル環境でも手軽に動作させたいというニーズが増えています。MiniCPM-o-2_6 はオープンソースのマルチモーダルAIであり、ローカルでの実行も可能です。本記事では llama.cpp を使用し、Windows 11 環境で MiniCPM-o-2_6 を動かす手順をまとめました。

また、環境構築に CMake を利用することで、ビルドや依存関係の管理が簡単になり、手軽にセットアップできる点も魅力です。CMake を活用することで、複雑な設定をすることなくスムーズに環境を構築できるため、本記事の方法を採用しました。

用語解説

llama.cppとは?

llama.cpp は、オープンソースの軽量な LLM(大規模言語モデル)推論フレームワークであり、Meta社が公開した LLaMA(Large Language Model Meta AI)シリーズのモデルをローカル環境で実行するために開発されました。このフレームワークは、特に低リソース環境向けに最適化されており、GPU を使用しなくても CPU 上で高いパフォーマンスを発揮できるのが特徴です。llama.cpp は C++ で実装されており、Windows、Linux、macOS などの主要なプラットフォームで利用可能です。

MiniCPM-o-2_6とは?

MiniCPM-o-2_6 は、オープンソースのマルチモーダル大規模言語モデル(MLLM)であり、テキスト、画像、音声などの複数のモダリティを処理することが可能です。このモデルは、エッジデバイスでの運用にも適した軽量な設計がされており、比較的低スペックなマシンでも動作できるのが特徴です。また、OCR(光学文字認識)機能が強化されており、最大1344×1344ピクセルの画像を処理可能なため、画像解析や視覚情報の理解にも活用できます。

llama.cpp はローカルで LLM を実行する際に非常に有効なツールであり、特に 軽量・シンプルな導入が可能 な点が優れています。そのため、本記事では llama.cpp を使用して MiniCPM-o-2_6 を動作させる方法を選択しました。

CMakeとは?

CMake は、プログラムのビルドを管理するためのクロスプラットフォームツールです。C++ などのプロジェクトでコンパイル・ビルドを簡単に行うために使用されます。

CMakeを使用する利点

CMake を使用する最大の利点は、クロスプラットフォーム対応であり、Windows、Linux、macOS など異なる OS でも統一的なビルド環境を提供できる点です。また、柔軟なビルド設定が可能で、CMakeLists.txt を記述することで、複雑なプロジェクトの管理が容易になります。

さらに、CMake は依存関係の管理にも優れており、外部ライブラリを簡単に導入し、統一されたビルド環境を構築することができます。これにより、異なる開発者や異なる環境でのビルドの再現性が向上し、開発の効率化が期待できます。

また、CMake を使用することで、ビルドの自動化や再利用性が高まり、同じ設定を異なる環境でも適用できるため、複数のプロジェクトや開発チーム間での統一した開発環境を維持しやすくなります。加えて、CMake は Visual Studio、Makefile、Ninja など、多くのビルドシステムとの互換性があり、環境に応じたビルドが容易に行える点も大きな利点です。

PCスペック・環境

CPU: Intel(R) Core(TM) i7-1355U 1.70 GHz
メモリ: 32.0 GB
OS: Windows 11 64bit
エディタ:VisualStudioCode

実装の前準備

CMakeの導入方法(Windows 11基準)

  1. CMake公式サイト から最新のバージョンをダウンロード

  2. インストーラーを実行し、システム環境変数にパスを追加
    ここで自分は「Add CMake to the system PATH for the All user」を選択しました。

  3. 保存先を聞かれるので、任意の好きな場所を選択

  4. インストール完了後、ターミナルで cmake --version を実行し、正常にインストールされたことを確認

    cmake version 3.31.4(筆者の環境)と出ました!
    これでCmakeの準備は完了です!

MiniCPM-o-2_6の用意

今回必要なモデル

  • Model-7.6B-Q4_K_M.gguf
  • mmproj-model-f16.gguf

モデルの導入手順

HuggingFaceに上記MiniCPM-o-2_6モデルのggufファイルが公開されているのでダウンロードします
huggingface.co

  1. 上記サイトへアクセスします

    赤枠で囲ってあるFiles and versionを押下します

  2. モデル一覧が表示されます。
    ここで、今回必要なモデル項に記載している2つのモデルをダウンロードします。

  3. ダウンロード後、どこか分かり易い場所へ一時保管しておきます

llama.cppの導入方法

下準備が全て完了したので、ここからはいよいよllama.cppの導入方法について解説していきます! github.com

といっても、llama.cppのgithubからクローンしてCmakeを実行するだけで構築できちゃいますので、作業自体は下準備項よりも早く終わります

Windows 11環境での導入手順

  1. ローカルに作業用ディレクトリを作成します。

     mkdir llama_test
     cd llama_test
    
  2. 作成したllama_testディレクトリ上でllama.cpp のリポジトリをクローン。
    完了後、llama.cppディレクトリへ移動します。

     git clone https://github.com/ggerganov/llama.cpp.git
     cd llama.cpp
    

  3. llama.cppディレクトリ上で以下コマンドを入力し、CMakeを使用してビルドを行います

     cmake -B build
     cd build
     cmake --build . --config Release
    

    ※cmake --build . --config Release はかなり時間がかかります

  4. 上記コマンドを上から順に実行すると、llama.cppに「build」フォルダが作成されます。

  5. モデルの準備項で用意しておいた2つのモデルをbuildフォルダに格納します。
    格納場所はどこでもOKです。自分は以下の場所にモデル格納用のディレクトリを作成し、格納しました。

    llama.cpp/build/bin/models/MiniCPM-o-2_6/

  6. 画像保管場所を用意します。
    次項にも記載していますが、画像を解析させるために画像のパスを教えてあげる必要があります。任意の場所に画像用フォルダを作成し、指定できるようにしておきましょう。

    筆者は以下のように画像保管フォルダを作成しました。 llama.cpp/build/bin/images/

これで実行準備が全て完了しました!次項から早速触ってみましょう!

実行してみる

実際にモデルを動作させるために、以下のコマンドを実行します。

※筆者はbuildディレクトリ上で実行しているので、以下のパス構成になっています。逐次書き換えてください

./bin/Release/llama-minicpmv-cli -m **./bin/models/MiniCPM-o-2_6/Model-7.6B-Q4_K_M.gguf** --mmproj **./bin/models/MiniCPM-o-2_6/mmproj-model-f16.gguf** -c 8192 --temp 0.7 --top-p 0.8 --top-k 100 --repeat-penalty 1.05 --image **./bin/images/001.png** -p "how many people are in the image" --n_predict 8192

今回解析してもらう画像は次の2つです

実行結果

① Developers Summit 2024 Summerでの集合写真

2024年にブース出展したDevelopers Summit 2024 Summerでの集合写真です!
この時のブース出展では、Safie OneSafie GO 360Safie Pocket2 Plusをブースに展示していました。 展示したプロダクトについても是非ご確認ください!

safie.jpsafie.jpsafie.jp

所要時間

1分以内(50秒程)

質問文

how many people are in the image

回答

There are four people in the image. They appear to be standing behind a booth, possibly promoting or demonstrating something related to 'safie'. Each person is holding up pamphlets with Japanese text and pictures of owls on them. The setting includes posters and banners about 'safie' technology, suggesting it might be an event or exhibition where they are showcasing their product or service.

The individuals seem engaged in presenting information about the company's offerings, as evidenced by the materials they're holding and the visual aids set up around them. There is also a table with more pamphlets available for visitors to take. The overall atmosphere indicates a professional presentation aimed at informing attendees about 'safie' technology or services.

In summary:

  • Four people are visible in the image.
  • They appear to be part of a promotional event for their company, possibly called 'safie'.
  • Their actions suggest they're explaining features related to owls and video management.

画像には4人が写っています。彼らはブースの後ろに立って、おそらく「safie」に関連した何かを宣伝またはデモンストレーションしているようです。それぞれが日本語の文字とフクロウの絵が描かれたパンフレットを掲げている。この設定には「セーフィー」テクノロジーに関するポスターやバナーが含まれており、自社の製品やサービスを紹介するイベントや展示会である可能性があることを示唆しています。

彼らが手にしている資料や周囲に設置された視覚補助具からわかるように、各個人は同社の製品に関する情報の提示に熱心に取り組んでいるように見えます。訪問者が手に取れるパンフレットが置かれたテーブルもあります。全体的な雰囲気は、参加者に「安全」テクノロジーやサービスについて知らせることを目的とした専門的なプレゼンテーションを示しています。

要約すれば:

  • 画像には 4 人が表示されます。
  • 彼らはおそらく「safie」と呼ばれる、自社のプロモーションイベントの一部であるようです。
  • 彼らの行動は、フクロウとビデオ管理に関連する機能を説明していることを示唆しています。

② セーフィーが掲げる映像プラットフォームの概念図

セーフィーの事業紹介にも掲載していますので、興味があれば以下サイトも確認してみてください
safie.co.jp

所要時間

2分程

質問文

describe the image

回答

The image is a detailed infographic in Japanese, featuring various applications of video data. The central element is the logo and name "safie," which appears to be a platform for integrating diverse analysis applications related to video data.

Surrounding this central theme are several circular images with corresponding text labels that illustrate different use cases:

  1. Restaurants: There's an image showing tables in a dining area, possibly indicating how video data can help monitor customer behavior or optimize operations.
  2. Hospitals: An image of hospital beds suggests the application could involve patient monitoring and facility management within medical settings.
  3. Street View / Tourism Locations: This includes images that might represent tourist spots or public spaces where surveillance or crowd analysis is beneficial.

Additionally, there are other applications mentioned:

  • Business Facilities
  • Crime Prevention
  • Construction Sites
  • Flood Monitoring

The infographic also mentions practical uses like sending out educational videos and calculating parking fees based on footage. Each application area has a visual representation to help understand its context better within the overall platform's capabilities.

Overall, it appears that "safie" is designed as an integrated solution for various industries looking to utilize video data efficiently across multiple sectors such as hospitality, healthcare, security, education, and more.

画像は、映像データのさまざまなアプリケーションを紹介する、日本語の詳細なインフォグラフィックです。中心となるのは「safie」というロゴと名前で、映像データに関連する多様な解析アプリケーションを統合するプラットフォームと思われる。

この中心テーマの周囲には、さまざまな使用例を示す対応するテキスト ラベルが付いたいくつかの円形の画像があります。

  1. レストラン: ダイニング エリアのテーブルを示す画像があり、映像データが顧客の行動の監視や業務の最適化にどのように役立つかを示している可能性があります。
  2. 病院: 病院のベッドの画像は、このアプリケーションに医療現場での患者の監視と施設管理が含まれる可能性があることを示唆しています。
  3. ストリートビュー / 観光地: これには、監視や群衆分析が有益な観光地や公共スペースを表す可能性のある画像が含まれます。

さらに、他のアプリケーションについても言及されています。

  • 商業施設
  • 防犯
  • 建設現場
  • 洪水監視

インフォグラフィックでは、教育映像の送信や映像に基づいた駐車料金の計算などの実用的な用途についても言及しています。各アプリケーション領域には視覚的な表現があり、プラットフォーム全体の機能内でそのコンテキストをよりよく理解できるようになります。

全体として、「safie」は、ホスピタリティ、ヘルスケア、セキュリティ、教育などの複数の分野にわたって映像データを効率的に活用したいと考えているさまざまな業界向けの統合ソリューションとして設計されているようです。

最後に

本記事では、ローカル環境で llama.cpp を使用して MiniCPM-o-2_6 を動作させる方法 について解説しました。

ローカルで LLM を実行する方法を探している方にとって、有益な情報になれば幸いです。

セーフィーではエンジニアを積極的に募集しています。どのような職種があるのか気になる方はこちらをご覧ください!

safie.co.jp

カジュアル面談から受け付けておりますので、気軽に応募いただければと思います! 皆様のご応募、心よりお待ちしております!

最後までお読みいただき、ありがとうございました

AIソリューションプラットフォーム推進室 始動

はじめに

セーフィー株式会社AIソリューションプラットフォーム推進室の植松です。

2024年12月に実施したセーフィーアドベントカレンダーでCTO 森本からご紹介がありましたとおり、AIソリューションプラットフォームが経産省プロジェクト(IR資料)として採択されたことをきっかけに、このプラットフォーム化に会社としてさらに注力して取り組むことになりました。

engineers.safie.link

その注力施策の一つとして、今年の1月から新たに部署を作りプロジェクトを進めていますので、今一度全体像と、事業ロードマップ、経産省プロジェクトにおける実証実験の取り組み状況、認知施策についてお話しできればと思います。

  • はじめに
  • AIソリューションプラットフォーム全体像
  • 事業ロードマップ
  • 経産省プロジェクトにおける実証実験について
    • テーマ1. 鹿島建設様
    • テーマ2. 清水建設様
    • テーマ3. 慶睦会様
  • 認知施策
  • 生成AIの取り組みについて
  • 最後に
続きを読む

Developers Summit 2025参加レポート

はじめに

セーフィーの髙木(@hitsan8)です。 セーフィーは2025年2月13、14日に行われたDevelopers Summit 2025(以下デブサミ)にブーススポンサーとして参加しました。

デブサミとは2003年から開催されているITエンジニアのための祭典です。今年のテーマは「ひろがるエンジニアリング」です。 event.shoeisha.jp

多くの方にセーフィーを知ってもらうために2023年から参加し続けて今年で3回目になりました。 この記事はデブサミのブーススポンサー参加レポートになります。

続きを読む

プロト開発WGの活動をご紹介

はじめに

こんにちは!セーフィー株式会社でデバイス開発をしている杉本です。

セーフィーでは普段の業務以外にも、エンジニアのスキルアップのために様々な取り組みを行っています。その一つの取り組みとしてエンジニアの「やってみたい!」をボトムアップで実現する活動をしています。

今回はコンセプトの立案からプロトタイプのユーザー検証まで行うプロト開発WG(ワーキンググループ)の活動をご紹介します!

  • はじめに
  • プロト開発WGの目的
  • やったこと
  • 他部署からのフィードバック
  • やってみて
  • 最後に
続きを読む

マイクロサービスアーキテクチャ輪読会を実施してみた

はじめに

こんにちは。

セーフィー株式会社でサーバーサイドの開発をしている金成です。

今回は、サーバーチームで「マイクロサービスアーキテクチャ第2版 」 を題材に、輪読会を開催したので、紹介させてください

  • はじめに
  • 背景
  • 実装/実行
  • やってみて
  • 終わりに
続きを読む

増え続けるリグレッションテスト項目を整理整頓した話

はじめに

こんにちは!QCDグループに所属している小熊です。

Safie Viewer for PCのQA(システムテスト)を2019年9月頃から担当しているのですが、悩みのタネであった「度重なるバージョンアップによって増え続けるリグレッションテスト項目」の解消を目指してトライしてみたことについて書こうと思います。

セーフィーにおけるQCDグループはどういう事をしているのか?を紹介している記事もございますので、是非こちらもご確認ください!

engineers.safie.link

  • はじめに
  • リグレッションテストについて
  • 暗黒時代
  • 「整理整頓」時代
  • その後(現在)
  • まとめ
続きを読む

Google Chrome 拡張機能をPlasmoで作ってみた

はじめに

セーフィー株式会社でサーバーサイドエンジニアをやっております石塚です。 今回はGoogle Chromeの拡張機能に入門したので備忘録として残しておこうと思います。完全にプライベートで利用するための拡張機能を実装したので、ゆるりと呼んでいただけると幸いです。

  • はじめに
  • 拡張機能の作り方
    • インストール
    • ローカルで実行
    • 実装
  • 最後に
続きを読む

AIソリューションプラットフォームの紹介

メリー・クリスマス、セーフィーCTOの森本です。 こちらはSafie Engineers' Blog! Advent Calendarの25日目のエントリーです。

早いもので、昨年創業以来10年の開発組織の振り返りについて掲載してからもう1年が経ちます。昨年の記事の最後でも触れた通り、メンバーのお陰で事業、組織、プロダクト、内部的な仕組みなど全てにおいて様々な課題を乗り越え再成長軌道に載せると共に、その先の更なる成長へ向けての仕込みも適宜進められていると実感しています。特に大きなチャレンジであったシステム刷新も専任チームを組成し、一歩一歩ですが進められている状況となっています。
さて、今回のエントリーではシステム刷新とは別の、先々に向けた重要な取り組みの一つであるAIソリューションプラットフォームについて紹介します。

  • はじめに
  • AIソリューションプラットフォーム概要
    • 実現したいこと
    • AIソリューション開発における課題
    • システム構成イメージ
    • 目指すべき姿
  • 経産省PJへの採択
  • 今後に向けて
  • まとめ
  • 最後に
続きを読む

デザイナーとエンジニアが取り組むUX改善

この記事はSafie Engineers' Blog! Advent Calendar 24日目の記事です。

はじめに

こんにちは、セーフィー 企画本部 デザインセンターの碇石(いかりいし)です。

2024年10月30日、デザインシステムを用いたUIリニューアルがついに公開されました。対象プロダクトは、エンタープライズ向けに多台数のカメラを統合管理できるSafie Manager(セーフィーマネージャー)です。

まず、デザインシステムについては、2019年12月頃から開発を進めていました。2023年に入ってからSafie Managerを含む管理ツールの開発を行っている開発チーム内でフレームワーク移行の話が上がり、そのタイミングに乗せる形でデザインシステムを用いたUIリニューアルプロジェクトが始動。
手探りでスタートしたこのプロジェクトは約1年10ヶ月の開発期間を経て無事公開となりました。

  • はじめに
    • 開発体制
  • 戦略:手探り感満載の初動期
    • ターゲットユーザー
    • 目的
    • UX課題
    • 具体方針
  • 構造:オブジェクト指向(OOUI)で再設計
    • サイトマップとデータ管理の流れの型化 
  • 骨格〜表層:作っては壊しを繰り返して磨き上げるUX
    • 画面構成(ゾーニング)
    • WF〜デザインカンプ
    • マイクロインタラクション
  • まとめ
  • さいごに
続きを読む

Kinesis Client Library(v2) for Python で躓きそうなポイント

この記事は Safie Engineers' Blog! Advent Calendar 23日目の記事です

はじめに

はじめまして、サーバーチームの城山です。 弊社の一部サービスで Kinesis Client Library(v2) for Python を利用しており、私なりに感じた躓きやすいポイントについてお話ししたいと思います。

  • はじめに
  • Kinesis Client Library for Python とは
  • 構成について
  • 躓きやすいポイント
    • 同一シャード内でのパーティションキー毎の処理遅延
    • 重複レコードの制御
    • ECS Fargate task での RecordProcessor のログ連携
    • タスク終了時の MultiLangDaemon のタイムアウトエラー
    • ローカル開発環境の構築
  • まとめ
続きを読む

© Safie Inc.