生物物理屋がローカルLLMを導入して遊んでみた話

## はじめに
この記事は「[ただただアウトプットを癖付けるための Advent Calendar 2024](https://qiita.com/advent-calendar/2024/newbie2024)」に投稿した記事です。

[最初の記事](https://qiita.com/yotabouya/items/e63c53c5e18b3cf6a454#%E3%81%AF%E3%81%98%E3%82%81%E3%81%AB)にも書いた通り、私は生物物理の実験を専門にしている研究者です。
最近はデータ解析のため機械学習のコード開発も行っており、幸いにもその成果が[NeurIPSに採択されました](https://neurips.cc/virtual/2024/poster/93465)。

昨今、LLM（Large Language Model）が注目されています。
これは、大規模なデータセットを用いて学習された言語モデルで、自然言語処理のタスクにおいて高い性能を発揮します。
トレーニングに大規模なデータセットが必要なため、一般的にはクラウド上で学習されますが、ローカル環境で学習することも可能です。これをローカルLLMと呼びます。
手元にGPUがあるので、試しにローカル環境で学習してみました。

## 関連記事

#### 前の記事「[Streamlitの学習をかねて、自分の研究を可視化してみた話](https://qiita.com/yotabouya/private/a31e318d2d48434fcce8)」

#### 次の記事「[生物物理屋がローカルLLMをAPIサーバーにして遊んでみた話](https://qiita.com/yotabouya/private/dae1261fde3989b7dfaf)」


## 参考記事
[Ollamaで体験する国産LLM入門](https://zenn.dev/hellorusk/books/e56548029b391f)

## 必要なもの

そこそこいいPC
今回は研究室のGPUサーバーが空いているタイミングだったので、ちょっと使ってみました。
A6000を搭載したマシンなので、だいぶオーバースペックです。

## やったこと

### インストール、立ち上げ
上記参考記事の2章、Ollamaを実際に使ってみるところをなぞりました。
Ubuntuなので、Ollama公式サイトにあるcurlのスクリプトを走らせると、簡単にインストールできました。
あとは、
```Ollama serve``` でサーバーを立ち上げて、
```Ollama run XXXX``` でモデルを実行するだけです。

#### 注意点
```Ollama serve```はサーバーを立ち上げますが、jupyter notebookを走らせたときのように、コンソールを占有してしまいます。
なので、別のターミナルを開いて、```Ollama run XXXX```を実行するといいです。
今回はリモートサーバーでやったので、tmuxを使っていました。

### 使ってみる
```Ollama run XXXX```でモデルを走らせると、Send messageという文字が出てきます。
chatGPTを使う時のように、ここに文章を投げることで、モデルが返答してくれます。
今回はllama3.2を使ってみました。英語の返答はかなり自然ですが、日本語の返答はまだまだですね。
ただ、今回はtmuxを使ってしまったので、その特性でログが流れて行ってしまい、過去のやり取りを見ることが困難になってしまいました。
どうにかログを残したい。

### ログを残す
tmuxのログか、あるいはOllamaのログをファイルに残す方法があるといいなと思いました。
今回はせっかくのローカルLLMの記事なので、Ollamaのログをファイルに残す方法を探してみます。

### pythonライブラリとしてのOllama
調べてみると、pythonライブラリとしてOllamaを使う方法があるようです。
[こちらの記事](https://blog.howtelevision.co.jp/entry/2024/05/31/101918)を参考に、pythonからOllamaを使ってみます。
また、ライブラリのメソッドについては[こちら](https://qiita.com/LiberalArts/items/6492e54d479789eddbcd)に詳しく書かれていました。

python 3.8.13 にて、```pip install ollama``` でインストールできました。
jupyter notebookを起動して、```import ollama``` したのち、
```python
response = ollama.chat(model='llama3.2', messages=[
  {
    'role': 'user',
    'content': 'How important is the cell morphology in morphogenesis?',
  },
])
```
とすると、responseに返答のオブジェクトが入ります。
```python
print(response.message.content)
```
とすると、返答の文章が表示されます。
```
Cell morphology plays a crucial role in morphogenesis, which is the process by which living organisms develop and shape their bodies. The shape and structure of cells are influenced by various factors, including genetic programs, mechanical forces, and environmental cues.

During morphogenesis, changes in cell morphology can occur through processes such as:

1. Cell division: Cells divide and grow, leading to an increase in the number of cells.
2. Cell migration: Cells move towards specific locations or boundaries.
3. Cell differentiation: Cells undergo changes in their shape and function to differentiate into specialized tissues or organs.
4. Cell adhesion: Cells interact with each other through cell-cell adhesion molecules, which can affect cell morphology.

Cell morphology influences morphogenesis in several ways:

1. **Shape and pattern formation**: The shape of individual cells and the interactions between them determine the patterns that emerge during development.
2. **Tissue organization**: Cell morphology affects how tissues organize themselves into specific structures, such as limbs or organs.
3. **Cell-cell interactions**: The shape and behavior of cells influence their ability to interact with each other, which is crucial for morphogenesis.

Examples of cell morphology influencing morphogenesis include:

1. **Wing formation in Drosophila**: The shape and arrangement of wing scales on the fly's wings are determined by the morphology of individual cells.
2. **Development of neural patterns**: The structure and organization of neurons are influenced by their morphology, leading to the formation of specific neural networks.
3. **Embryonic development**: Changes in cell morphology during embryogenesis contribute to the formation of specific tissues and organs.

In summary, cell morphology is a critical factor in morphogenesis, as it determines the shape and structure of individual cells and tissue patterns that emerge from their interactions.
```
これをきちんとログとして残すなら、オブジェクトそのものを保存してしまうなり、この返答内容をテキストファイルなどに書き出すなり、方法はいくらでもありますね。
今回は、pickleを使ってオブジェクトを保存できることを確認しました。
pickleの使い方は[こちら](https://qiita.com/ndj/items/70d60725b96f3d899f23)。