[ChatSream] モデルをロードする方法

[ChatSream] モデルをロードする方法

こんにちは! (株)Qualiteg プロダクト開発部 です!

本稿では、 ChatStream に HuggingFaceモデルを読み込むときのアプローチについてご説明いたします

HuggingFace モデルのロード

モデルごとに指定された方法で HuggingFace モデルを読み込みます。

model_path = "togethercomputer/RedPajama-INCITE-Chat-3B-v1"
device = "cuda"  # "cuda" / "cpu"

tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, torch_dtype=torch.float16)
model.to(device)

こちらは、シングルGPUを想定したときのアプローチでしたが、次にマルチGPUのときのアプローチを紹介いたします。

マルチGPUに対応したモデルの読み込み

モデルのパラメータ数が巨大な場合1枚のGPUに乗り切らない場合があります

サーバー内に複数枚のGPUがある場合は以下 load_hf_model 関数をつかい num_gpus=2 のように複数の GPU を使用してモデルを読み込むことができます。

このとき、サーバー内にGPU数が4枚あり、num_gpus=2 が指定された場合、GPU ID が若い順から 2枚が使用されます。

また、GPUの搭載メモリ量が異なる場合は max_gpu_memory を指定して、もっとも少ないメモリ量にあわせるか、 max_gpu_memory を指定しないで、
各 GPU のメモリ量に応じた量を順に割り当てていきます。このときは、"device_map": "sequential" が指定されます。

import torch
from transformers import AutoTokenizer, AutoModelForCausalLM


def load_hf_model(model_path: str, device: str = "cuda", num_gpus: int = None, max_gpu_memory: str = None,
                  model_opts={}, tokenizer_opts={}):
    if device == "cpu":
        # When using Redpajama-Incite for CPU-based inference,
        # bfloat16 was recommended, but I thought it was faster to specify no bfloat16.
        kwargs = {}  # "torch_dtype": torch.bfloat16}
    elif device == "cuda":
        kwargs = {"torch_dtype": torch.float16}
        if num_gpus is None:
            num_gpus = 1
            kwargs["device_map"] = "auto"
        elif num_gpus == 1:
            pass
        elif num_gpus > 1:

            kwargs["device_map"] = "auto"

            if max_gpu_memory is None:
                kwargs["device_map"] = "sequential"

                available_gpu_memory_list = get_available_gpu_memory_list(num_gpus)

                max_memory_dict = {}
                for i in range(num_gpus):
                    memory = available_gpu_memory_list[i] * 0.85
                    memory_str = str(int(memory)) + "GiB"
                    max_memory_dict[i] = memory_str
                kwargs["max_memory"] = max_memory_dict
                # for example
                # max_memory_dict= { 0: "8GiB", 1: "10GiB", 2: "6GiB", 3: "13GiB" }
            else:
                max_memory_dict = {}
                for i in range(num_gpus):
                    max_memory_dict[i] = max_gpu_memory
                kwargs["max_memory"] = max_memory_dict


    elif device == "mps":
        kwargs = {"torch_dtype": torch.float16}
    else:
        raise ValueError(f"Invalid device: {device}")

    kwargs.update(model_opts)

    tokenizer = AutoTokenizer.from_pretrained(model_path, **tokenizer_opts)
    model = AutoModelForCausalLM.from_pretrained(model_path,
                                                 **kwargs)

    if (device == "cuda" and num_gpus == 1) or device == "mps":
        model.to(device)
    return model, tokenizer, device


def get_available_gpu_memory_list(max_gpus=None):
    available_gpu_count = torch.cuda.device_count()

    if max_gpus is None:
        num_gpus = available_gpu_count
    else:
        num_gpus = min(max_gpus, available_gpu_count)

    gpu_memory_list = []

    for gpu_id in range(num_gpus):
        with torch.cuda.device(gpu_id):
            device = torch.cuda.current_device()
            gpu_properties = torch.cuda.get_device_properties(device)
            total_memory = gpu_properties.total_memory / (1024 ** 3)
            allocated_memory = torch.cuda.memory_allocated() / (1024 ** 3)
            available_memory = total_memory - allocated_memory
            gpu_memory_list.append(available_memory)
    return gpu_memory_list


Read more

日本語対応 LLMランキング2026 ~ベンチマーク分析レポート~(10月22日版)

日本語対応 LLMランキング2026 ~ベンチマーク分析レポート~(10月22日版)

まず結論 2026年10月22日時点のLLMランキング 日本語対応LLMランキングの2026年10月22日版です。前置きは後回しにして、まず最新のランキングからお見せします。 フロンティアモデルの最新ランキング TOP20(Epoch Capabilities Index) 順位 モデル 開発元 提供形態 公開日(Epoch AI記載) ECI 1Claude Opus 5.5AnthropicAPI09/22168.8 2GPT-6 AstraOpenAIAPI09/03168.8 3GPT-6.1 SolOpenAIAPI09/29168.4 4Claude Fable 5.1AnthropicAPI09/01166.5 5Gemini 4 ArgonGoogleAPI09/30166.4 6Claude Sonnet 5.5AnthropicAPI09/28166.2

By Qualiteg プロダクト開発部, Qualiteg コンサルティング
(株)Qualiteg、CEATEC 2026 出展レポート

(株)Qualiteg、CEATEC 2026 出展レポート

こんにちは!2026年10月13日(火)から16日(金)までの4日間、幕張メッセで開催された「CEATEC 2026」に、出展してまいりました。 昨年の CEATEC 2025 に続いて今年も出展してまいりました。 (昨年の様子は CEATEC 2025 出展レポート に、今年の出展予告は こちらの記事 です) 今年は主催者発表で、CEATEC 2026 4日間の登録来場者総数が 112,373人。昨年の98,884人を上回る規模になりました。 当社ブースも昨年より多くのお客様にお越しいただき、 ご来訪者さまは昨年の2倍になりました。 このレポートでは、準備日から最終日までを時系列で振り返ります。 各日の公式来場者数も載せておきますので、来年出展される方(と来年の私たち自身の備忘録としても)のお役に立てば幸いです。 目次 * 1. CEATEC 2026 出展概要 * 2. 前日(10月12日)ブース設営 * 3. DAY1(

By Qualiteg ビジネス開発本部 | マーケティング部
CEATEC 2026に出展します!AIアバター動画生成「MotionVox®」の最新版を実体験いただけます

CEATEC 2026に出展します!AIアバター動画生成「MotionVox®」の最新版を実体験いただけます

株式会社Qualitegは、2026年10月13日(火)~16日(金)に幕張メッセで開催される「CEATEC 2026」に出展いたします。今回の出展では、当社が開発したAIアバター動画生成サービス「MotionVox®」の最新版を中心に、動画生成の実演と作例をご紹介いたします。 昨年の CEATEC 2025 に続き、2年連続の出展となります。昨年の会場の様子は 出展レポート にまとめております。 出展概要 * 会期 2026年10月13日(火)~10月16日(金)10:00~17:00 * 会場 幕張メッセ(千葉県千葉市美浜区中瀬2-1) * 出展エリア ネクストジェネレーションパーク * ブース番号 ホール4 4H339 * 入場 無料(来場事前登録制) * CEATEC内特設サイト https://www.ceatec.com/nj/exhibitor_

By Qualiteg プロダクト開発部
ゼロから作るコーディングエージェント【第3回】「止まらなかった」は「進んだ」ではない。空転を数え、思考は切らずに上限だけ置く

ゼロから作るコーディングエージェント【第3回】「止まらなかった」は「進んだ」ではない。空転を数え、思考は切らずに上限だけ置く

300ターン走ってAPIが0本。「モデルの限界」と結論を書いた翌日、記録を読み直すと234ターンがツールを1度も呼んでいませんでした。空転率という指標、1つ塞ぐと次の形に移る空転、思考をオフにすると95点が71点に落ちて時間も縮まなかった話、出力枠を広げたら反対側を数える話を書きます。

By Qualiteg プロダクト開発部