0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

H100一枚で動くApache 2.0のコーディングMoE、CohereのNorth Mini Code

0
Posted at

Cohereと聞いて思い浮かべるのは、たいてい埋め込みベクトルやエンタープライズ向けRAGの会社だ。その会社が出してきた最初の「開発者向け」モデルが、自社のAPIに閉じ込めた巨大モデルではなく、Apache 2.0で重みを丸ごと公開したコーディング特化モデルだった。これは少し意外で、そして実務的には面白い。

公開されたのは North Mini Code。30B総パラメータ・アクティブ3BのMoE(Mixture-of-Experts、トークンごとに一部の「専門家」だけを使う疎なアーキテクチャ)で、H100一枚に載る。コード生成というより、エージェントの中で道具を呼びながら作業を進める用途を狙っている。

なぜ「小さくて自前で動く」ことが効くのか

強いコーディングモデルは、だいたい二択になりがちだ。閉じたAPI越しに使う最上位モデルか、重みは公開されていても自分のGPUには載らない巨大モデルか。コードという最も外に出しにくい資産を扱うのに、推論を外部サービスに丸投げするしかない、という構図がずっと残っていた。

North Mini Codeはここを正面から外す。重みはHugging Faceにあり、ライセンスはApache 2.0、推論は 1× H100 @ FP8(さらに量子化を効かせれば 1× H100 @ FP4)で動く。配布は次の量子化が用意されている。

項目 内容
総 / アクティブパラメータ 30B / 3B(128エキスパート中8個を起動)
ライセンス Apache 2.0
最小構成 H100 ×1(FP8 / FP4)
量子化 BF16 / FP8 / W4A16
文脈長(提供時) 入力256K / 出力最大64K

エージェント用途で30B級が現実的なのは、推論の安さと並列性が効くからだ。Cohereは同サイズ帯のDevstral Small 2に対し、出力スループットで最大2.8倍、トークン間レイテンシで約30%の優位を主張している。レイテンシ×並列数がコストに直結するエージェント運用では、この差は効く。

ハーネスの中で訓練された、という発想

個人的に一番おっと思ったのは、ベンチマークの数字よりも訓練のやり方だ。Hugging Faceの解説記事によると、North Mini Codeは二段階のSFTのあと、検証可能な報酬による強化学習(RLVR、テストが通るかどうかのように正誤を機械的に判定できる報酬で学習する手法)を回している。第二段階のSFTは約5,000リポジトリ由来の45億トークン、うち61%がコードだという。

ここでの「ハーネス」とは、モデルにファイルを読ませ、コマンドを実行させ、その結果を次のプロンプトに戻す、エージェントの足回りのことだ。SWE-AgentやOpenCodeがそれにあたる。North Mini Codeは特定の一つに最適化するのではなく、複数のハーネス上で訓練し、SFT混合の6%をハーネス間の汎化のために割いたとされる。狙いは、足回りを差し替えても挙動が崩れにくいモデルにすることだ。

スコアもこの文脈で読むと意味が見える。SWE-Bench VerifiedはSFT段階で80.2%(pass@10)、RLVRで絶対3.0ポイント改善、Terminal-Bench v2はRLVRで7.9ポイント改善、と報告されている。一方で第三者のArtificial Analysis Coding Indexでは33.4で、最上位を狙う数字ではない。ここは正直に受け取るべきで、このモデルの価値は単体の賢さではなく、自前で回せて足回りに強いという運用上の性質にある。

動かす

重みからそのまま使うなら、モデルカードのTransformers例がそのまま使える。

from transformers import AutoTokenizer, AutoModelForCausalLM

model_id = "CohereLabs/North-Mini-Code-1.0"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id)

messages = [{"role": "user", "content": "Write a python program..."}]
input_ids = tokenizer.apply_chat_template(
    messages,
    tokenize=True,
    add_generation_prompt=True,
    return_tensors="pt",
)

gen_tokens = model.generate(
    **input_ids,
    max_new_tokens=1024,
    do_sample=True,
    temperature=1.0,
    top_p=0.95,
)

エージェントとして使うならvLLMでサーブする。注意点として、ツール呼び出しと思考の解析に専用パーサ cohere_command4 を指定する必要がある。汎用の設定をコピペすると、ツールコールがうまく拾えないはずだ。

vllm serve CohereLabs/North-Mini-Code-1.0 \
  -tp 2 \
  --max-model-len 320000 \
  --tool-call-parser cohere_command4 \
  --reasoning-parser cohere_command4 \
  --enable-auto-tool-choice

GPUを用意したくなければ、OpenRouterに無料エンドポイント cohere/north-mini-code:free がある(レート制限や提供の継続性は無料枠相応なので、本番前提では注意)。FP8重みは別リポジトリ CohereLabs/North-Mini-Code-1.0-fp8 として公開されている。

一点、文脈長は鵜呑みにしない

ソースを突き合わせると、提供時のスペックは入力256Kとされる一方、HF記事の記述では訓練・評価の文脈長は段階的に64K→128Kまでで、256Kフルでの評価には触れていない。つまり「256K入力可」と「256Kで信頼して長文を扱える」は別の話だと見ておいたほうがいい。長文脈に賭ける使い方をするなら、128Kを超える領域は自分のタスクで実測してから本番に入れるべきだ。

North Mini Codeは賢さ競争の一台ではなく、コードを外に出さずにエージェントを自前で回したいチームに向けた一台だと思う。Apache 2.0でH100一枚という条件は、社内ツールや規制の厳しい環境でこそ刺さる。Cohereがエンタープライズ寄りの会社だと思い出すと、最初の開発者向けモデルがこの形なのは案外まっすぐな選択に見えてくる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?