LM Studio のインストール方法

データサイエンス演習で学生さんたちにLLM(大規模言語モデル)を体験してもらいたいと考えていたが,Haggin Faceでは物足りず,ChatGPTへの登録は面倒だし,お金をとられる可能性もある.(APIコールは3.5でも無料ではできないのだ.)
そこで,ローカルでLLMが動かせる LM Studio を使ってみたらと思い立った.以下に,インストール方法をまとめておく.

以下のサイトに行って,自分のマシンにあっているものをダウンロードする.MacはSilliconだけでIntelはダメなようだが,うちの学生さんはWindowsを推奨されているようなので,たぶん大丈夫だ.

追記:ためしにそこそこのWindowsマシンで試してみたら,全然動かないようだ.うちの大学の推奨スペックだと,だぶん微動だにしないだろう.という訳で,演習でするのは諦めよう.せめて Sillicon Mac 16Gあたりを推奨していたら,学生さんの未来も変わるだろうに...

起動すると以下のようなフロントページが出る.

初期画面


左部アイコン

左側の虫眼鏡アイコンを押して,モデルの検索へ行く.そこで Mistral 7B Instruct v0.2 (追記:このモデルはメモリが少ないマシンだと重すぎるようだ.Phi2の最小サイズあたりが良いだろう)と入れると,たくさん候補が出てくるので,自分のマシンのメモリと相談しながら適当なもの(5G以下でも十分!)をダウンロードする.
ダウンロードには時間がかかるので,注意が必要だ.使い放題でないwifiを利用している学生さんは,無理せずに大学へ行ってからダウンロードしてください.

日本語に特化した大規模モデルを使って解説している人も多いが,あまりおすすめしない.大規模だからといって賢いわけではないのだ.実際に,「あなたは馬鹿ですか?」と聞いたら「はい,馬鹿です.」と答えてきたものもある.

チャットのアイコンを押してから,上部でダウンロードしたモデルを選択するだけで,ローカルで動くChatGPT4もどきができる.

左右矢印のアイコンを押すと,ローカルにサーバーを起動できる.上部でモデル選択をしたあとに,Start Serverというボタンを押すと起動する.

サーバー起動(右下)

呼び出すにはPythonが動く環境に openai パッケージをインストール (pip install openai) してから,以下のようにしてローカルサーバーに接続する.

なお,プロンプトを入れるとレスポンスを返す関数を作っておくと便利だ.

from openai import OpenAI 

client = OpenAI(base_url="http://localhost:1234/v1", api_key="not-needed")
def get_completion(prompt, model="local-model", temperature=0):
    messages = [{"role": "user", "content": prompt}]
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=0 # this is the degree of randomness of the model's output
    )
    return response.choices[0].message.content

def get_completion_from_messages(messages, model="local-model", temperature=0):
    response = client.chat.completions.create(
        model=model,
        messages=messages,
        temperature=temperature, # this is the degree of randomness of the model's output
    )
    return response.choices[0].message.content

たとえば,文章要約は,以下のようなプロンプトを入れればよい.

text = f"""
モデルに望む動作を明確かつ具体的な指示で表現することが重要です。\
これにより、モデルは望ましい出力に向かって誘導され、不適切な回答を受け取る可能性が減ります。\
明確なプロンプトを書くことと短いプロンプトを書くことを混同しないでください。\
多くの場合、長いプロンプトの方がモデルにとってより明確で、より詳細で関連性の高い出力につながることがあります。
"""

prompt = f"""
<tag> </tag>で囲まれた以下の文章を,日本語の一文に要約してください. 
<tag>{text}</tag>
"""
response = get_completion(prompt)
print(response)


この記事が気に入ったらサポートをしてみませんか?