第 5 章 使用模型提供和聊天
要与 Red Hat Enterprise Linux AI 上的各种模型交互,您必须提供在服务器中托管它的模型,然后您可以使用模型进行聊天。
5.1. 提供模型 复制链接链接已复制到粘贴板!
要与模型交互,您必须首先通过服务激活机器中的模型。ilab 模型服务 命令启动 vLLM 服务器,允许您与模型进行聊天。
先决条件
- 已使用可引导容器镜像安装了 RHEL AI。
- 您初始化了 InstructLab。
- 已安装您首选的 Granite LLM。
- 在机器上具有 root 用户访问权限。
流程
如果没有指定模型,您可以通过运行以下命令来提供默认模型
granite-7b-redhat-lab:$ ilab model serve要服务特定模型,请运行以下命令
$ ilab model serve --model-path <model-path>示例命令
$ ilab model serve --model-path ~/.cache/instructlab/models/granite-8b-code-instruct模型提供并就绪时的输出示例
INFO 2024-03-02 02:21:11,352 lab.py:201 Using model 'models/granite-8b-code-instruct' with -1 gpu-layers and 4096 max context size. Starting server process After application startup complete see http://127.0.0.1:8000/docs for API. Press CTRL+C to shut down the server.
5.1.1. 可选:运行 ilab 模型 作为服务 复制链接链接已复制到粘贴板!
您可以设置 systemd 服务,以便 ilab 模型服务 命令作为正在运行的服务运行。systemd 服务在后台运行 ilab model serving 命令,并在其崩溃或失败时重新启动。您可以将服务配置为在系统启动时启动。
先决条件
- 您在裸机上安装了 Red Hat Enterprise Linux AI 镜像。
- 您初始化的 InstructLab
- 您下载了您首选的 Granite LLMs。
- 在机器上具有 root 用户访问权限。
流程.
运行以下命令,为您的
systemd用户服务创建一个目录:$ mkdir -p $HOME/.config/systemd/user使用以下示例配置创建
systemd服务文件:$ cat << EOF > $HOME/.config/systemd/user/ilab-serve.service [Unit] Description=ilab model serve service [Install] WantedBy=multi-user.target default.target1 [Service] ExecStart=ilab model serve --model-family granite Restart=always EOF- 1
- 指定在引导时默认启动。
运行以下命令来重新载入
systemdManager 配置:$ systemctl --user daemon-reload运行以下命令启动
ilab 模型服务systemd服务:$ systemctl --user start ilab-serve.service您可以使用以下命令检查该服务是否正在运行:
$ systemctl --user status ilab-serve.service您可以运行以下命令来检查服务日志:
$ journalctl --user-unit ilab-serve.service要允许服务在引导时启动,请运行以下命令:
$ sudo loginctl enable-linger可选:您可以运行几个可选命令来维护
systemd服务。您可以运行以下命令来停止 ilab-serve 系统服务:
$ systemctl --user stop ilab-serve.service-
您可以通过从
$HOME/.config/systemd/user/ilab-serve.service文件中删除"WantedBy=multi-user.target default.target"来防止服务在引导时启动。
5.1.2. 可选:允许从安全端点访问模型 复制链接链接已复制到粘贴板!
您可以服务 inference 端点,并通过创建 systemd 服务并设置公开安全端点的 nginx 反向代理,让其他人与 Red Hat Enterprise Linux AI 在安全连接上交互。这可让您与其他端点共享安全端点,以便它们可以通过网络与模型进行聊换。
以下流程使用自签名认证,但建议使用由可信证书颁发机构(CA)发布的证书。
只有在裸机平台上才支持以下步骤。
先决条件
- 您已在裸机上安装了 Red Hat Enterprise Linux AI 镜像。
- 您初始化的 InstructLab
- 您下载了您首选的 Granite LLMs。
- 在机器上具有 root 用户访问权限。
流程
运行以下命令,为您的证书文件和密钥创建一个目录:
$ mkdir -p `pwd`/nginx/ssl/运行以下命令,使用正确的配置创建 OpenSSL 配置文件:
$ cat > openssl.cnf <<EOL [ req ] default_bits = 2048 distinguished_name = <req-distinguished-name>1 x509_extensions = v3_req prompt = no [ req_distinguished_name ] C = US ST = California L = San Francisco O = My Company OU = My Division CN = rhelai.redhat.com [ v3_req ] subjectAltName = <alt-names>2 basicConstraints = critical, CA:true subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer [ alt_names ] DNS.1 = rhelai.redhat.com3 DNS.2 = www.rhelai.redhat.com4 使用以下命令生成启用了 Subject Alternative Name (SAN)的自签名证书:
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout `pwd`/nginx/ssl/rhelai.redhat.com.key -out `pwd`/nginx/ssl/rhelai.redhat.com.crt -config openssl.cnf$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout运行以下命令,创建 Nginx 配置文件并将其添加到
'pwd/nginx/conf.d' 中:mkdir -p `pwd`/nginx/conf.d echo 'server { listen 8443 ssl; server_name <rhelai.redhat.com>1 ssl_certificate /etc/nginx/ssl/rhelai.redhat.com.crt; ssl_certificate_key /etc/nginx/ssl/rhelai.redhat.com.key; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ' > `pwd`/nginx/conf.d/rhelai.redhat.com.conf- 1
- 指定服务器的名称。在示例中,服务器名称为
rhelai.redhat.com
运行以下命令,使用新配置运行 Nginx 容器:
$ podman run --net host -v `pwd`/nginx/conf.d:/etc/nginx/conf.d:ro,Z -v `pwd`/nginx/ssl:/etc/nginx/ssl:ro,Z nginx如果要使用端口 443,则必须以 root 用户身份运行
podman run命令。现在,您可以使用安全端点 URL 连接到服务 ilab 机器。示例命令:
$ ilab model chat -m /instructlab/instructlab/granite-7b-redhat-lab --endpoint-url您还可以使用以下命令连接到服务 RHEL AI 机器:
$ curl --location 'https://rhelai.redhat.com:8443/v1' \ --header 'Content-Type: application/json' \ --header 'Authorization: Bearer <api-key>' \ --data '{ "model": "/var/home/cloud-user/.cache/instructlab/models/granite-7b-redhat-lab", "messages": [ { "role": "system", "content": "You are a helpful assistant." }, { "role": "user", "content": "Hello!" } ] }' | jq .其中
- <api-key>
- 指定 API 密钥。您可以按照"创建 API 密钥以使用模型进行聊天"中的步骤创建自己的 API 密钥。
可选: 您还可以获取服务器证书并将其附加到 Certifi CA 捆绑包中
运行以下命令来获取服务器证书:
$ openssl s_client -connect rhelai.redhat.com:8443 </dev/null 2>/dev/null | openssl x509 -outform PEM > server.crt将证书复制到您系统的可信 CA 存储目录中,并使用以下命令更新 CA 信任存储:
$ sudo cp server.crt /etc/pki/ca-trust/source/anchors/$ sudo update-ca-trust您可以运行以下命令来将证书附加到 Certifi CA 捆绑包:
$ cat server.crt >> $(python -m certifi)现在,您可以使用自签名证书运行
ilab 模型聊天。示例命令:$ ilab model chat -m /instructlab/instructlab/granite-7b-redhat-lab --endpoint-url https://rhelai.redhat.com:8443/v1