# 使用 Unsloth 和 Docker 微调 LLM

本地训练可能因依赖地狱或环境破坏而变得复杂。Unsloth 的 [Docker 镜像](https://hub.docker.com/r/unsloth/unsloth) 可以绕过这些问题。无需设置：拉取并运行镜像即可开始训练。

* **Unsloth 官方 Docker 镜像：** [**`unsloth/unsloth`**](https://hub.docker.com/r/unsloth/unsloth)

**为什么使用 Unsloth 与 Docker？**

Unsloth 的 Docker 镜像稳定、最新，并且在 [受支持的设置](/docs/zh/kai-shi-shi-yong/fine-tuning-for-beginners/unsloth-requirements.md#system-requirements) 如 Windows 上可用。

* 完全包含的依赖使系统保持清洁。无 root 也能安全运行。
* 可在本地或任何预装笔记本的平台上使用。

{% hint style="success" %}
您现在可以使用我们的主 Docker 镜像 `unsloth/unsloth` 用于 Blackwell 和 50 系列 GPU —— 无需单独镜像。
{% endhint %}

### ⚡ 逐步教程

{% stepper %}
{% step %}
**安装 Docker 和 NVIDIA Container Toolkit。**

通过以下方式安装 Docker [Linux](https://docs.docker.com/engine/install/) 或 [桌面](https://docs.docker.com/desktop/) （其他）。\
然后安装 [NVIDIA Container Toolkit](https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html#installation):

<pre class="language-bash"><code class="lang-bash"><strong>export NVIDIA_CONTAINER_TOOLKIT_VERSION=1.17.8-1
</strong>sudo apt-get update &#x26;&#x26; sudo apt-get install -y \
  nvidia-container-toolkit=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  nvidia-container-toolkit-base=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container-tools=${NVIDIA_CONTAINER_TOOLKIT_VERSION} \
  libnvidia-container1=${NVIDIA_CONTAINER_TOOLKIT_VERSION}
</code></pre>

<figure><img src="/files/8f3bf33c47ce755d8b292f85bff67057bfda2bd8" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**运行容器。**

[**`unsloth/unsloth`**](https://hub.docker.com/r/unsloth/unsloth) 是 Unsloth 的唯一 Docker 镜像。对于 [Blackwell](/docs/zh/bo-ke/fine-tuning-llms-with-blackwell-rtx-50-series-and-unsloth.md) 和 50 系列 GPU，使用相同的镜像即可 —— 无需单独镜像。如果使用 DGX Spark，您需要遵循我们的 [DGX 指南](/docs/zh/bo-ke/fine-tuning-llms-with-nvidia-dgx-spark-and-unsloth.md).

```bash
docker run -d -e JUPYTER_PASSWORD="mypassword" \
  -p 8888:8888 -p 2222:22 \
  -v $(pwd)/work:/workspace/work \
  --gpus all \
  unsloth/unsloth
```

<figure><img src="/files/2a98185266756c4ff5716bd5411c5d981624317f" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**访问 Jupyter Lab**

前往 [http://localhost:8888](http://localhost:8888/) 并打开 Unsloth。

<figure><img src="/files/4fc869e28f370e86f0135d389a3b871b734b5fb4" alt="" width="563"><figcaption></figcaption></figure>

访问 `unsloth-notebooks` 选项卡以查看 Unsloth 笔记本。

<div><figure><img src="/files/ad4f85d926c69021aeccd88f5ff808d33c7c5a04" alt=""><figcaption></figcaption></figure> <figure><img src="/files/5c5dfcf0c52fa315849e660f8c35b61109e8cfcc" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**开始使用 Unsloth 进行训练**

如果您是新手，请按照我们的逐步 [微调指南](/docs/zh/kai-shi-shi-yong/fine-tuning-llms-guide.md), [强化学习指南](/docs/zh/kai-shi-shi-yong/reinforcement-learning-rl-guide.md) 或只是保存/复制我们任何预制的 [笔记本](/docs/zh/kai-shi-shi-yong/unsloth-notebooks.md).

<figure><img src="/files/b7da0983149ef6f31b9dfe456afe367682a6d019" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

#### 📂 容器结构

* `/workspace/work/` — 您挂载的工作目录
* `/workspace/unsloth-notebooks/` — 示例微调笔记本
* `/home/unsloth/` — 用户主目录

### 📖 使用示例

#### 完整示例

```bash
docker run -d -e JUPYTER_PORT=8000 \
  -e JUPYTER_PASSWORD="mypassword" \
  -e "SSH_KEY=$(cat ~/.ssh/container_key.pub)" \
  -e USER_PASSWORD="unsloth2024" \
  -p 8000:8000 -p 2222:22 \
  -v $(pwd)/work:/workspace/work \
  --gpus all \
  unsloth/unsloth
```

#### 设置 SSH 密钥

如果您没有 SSH 密钥对：

```bash
# 生成新的密钥对
ssh-keygen -t rsa -b 4096 -f ~/.ssh/container_key

# 在 docker run 中使用公钥
-e "SSH_KEY=$(cat ~/.ssh/container_key.pub)"

# 通过 SSH 连接
ssh -i ~/.ssh/container_key -p 2222 unsloth@localhost
```

### ⚙️ 高级设置

| 变量                 | 说明                                                        | 默认        |
| ------------------ | --------------------------------------------------------- | --------- |
| `JUPYTER_PASSWORD` | Jupyter Lab 密码                                            | `unsloth` |
| `JUPYTER_PORT`     | 容器内的 Jupyter Lab 端口                                       | `8888`    |
| `SSH_KEY`          | 用于验证的 SSH 公钥                                              | `无`       |
| `USER_PASSWORD`    | 用户的密码（sudo） `unsloth` -p \<host\_port>:\<container\_port> | `unsloth` |

```bash
Jupyter Lab：
```

* -p 8000:8888 `SSH 访问：`
* -p 2222:22 `重要`

{% hint style="warning" %}
**： 使用卷挂载以在容器运行之间保留您的工作。**-v \<local\_folder>:\<container\_folder>
{% endhint %}

```bash
🔒 安全提示
```

```bash
docker run -d -e JUPYTER_PORT=8000 \
  -e JUPYTER_PASSWORD="mypassword" \
  -e "SSH_KEY=$(cat ~/.ssh/container_key.pub)" \
  -e USER_PASSWORD="unsloth2024" \
  -p 8000:8000 -p 2222:22 \
  -v $(pwd)/work:/workspace/work \
  --gpus all \
  unsloth/unsloth
```

### **容器默认以非 root**

* 用户身份运行 `unsloth` 在容器内进行 sudo 操作请使用
* 以在容器内执行 sudo 操作 `USER_PASSWORD` SSH 访问需要公钥认证
* SSH 访问需要公钥认证


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://unsloth.ai/docs/zh/bo-ke/how-to-fine-tune-llms-with-unsloth-and-docker.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
