使用数据科学和 AI 快速操作在 GPU 上微调和部署开源 LLM

简介

本教程将指导您使用 Oracle Cloud Infrastructure (OCI) Data Science 服务,使用 Data Science 提供的 AI Quick Actions 功能微调开源 LLM。通过轻松点击,您将使用 AI Quick Actions 对 Hugging Face 提供的 Mistral LLM 进行微调,并根据 NVIDIA 发布的常见问题对该 LLM 进行微调。然后,AI Quick Actions 用于在 A10 GPU 配置的 OCI 中部署该优化模型。然后,在 Jupyter 笔记本中运行的 Python 代码用于表明调优模型的输出具有与 NVIDIA 训练数据相似的所需样式和语调。

目标

Prerequisites

任务 1:预配数据科学记事本会话

  1. 使用 OCI 控制台创建数据科学项目。

  2. 导航到该项目并创建具有两个或更多 ECPU 的数据科学记事本会话。

  3. 打开该记事本会话,然后单击扩展

  4. 在数据科学中启动终端会话。

  5. 使用该终端克隆包含将由本教程使用的 Jupyter 记事本的 github 资料档案库:

    git clone https://github.com/oracle-nace-dsai/quick-actions-demo-archive.git
    
  6. 克隆 NVIDIA 常见问题解答:

    git clone https://huggingface.co/datasets/ajsbsd/nvidia-qa
    
    
  7. 将 NVIDIA 常见问题解答复制到第一个存储库的数据目录

    cp nvidia-qa/NvidiaDocumentationQandApairs.csv quick-actions-demo-archive/data/.
    
    
  8. 安装并激活 General Machine Learning for CPUs on Python 3.11 conda:

    odsc conda install -s generalml_p311_cpu_x86_64_v1 
    conda activate /home/datascience/conda/generalml_p311_cpu_x86_64_v1
    
  9. 每 https://github.com/oracle-samples/oci-data-science-ai-samples/blob/main/ai-quick-actions/model-deployment-tips.md#using-python-sdk-without-streaming 安装 LangChain

    pip install langgraph "langchain>=0.3" "langchain-community>=0.3" "langchain-openai>=0.2.3" "oracle-ads>2.12"
    

任务 2:设置拥抱面帐户

  1. 在 https://huggingface.co. 创建 Hugging Face 帐户

  2. 导航到您的 Hugging Face 帐户 > Access Tokens(访问令牌),并创建选中了以下权限的新用户访问令牌:

    • 读取您的个人名称空间下所有存储库的内容
    • 读取您可以访问的所有公共网关系统信息库的内容
  3. 使用数据科学终端会话通过拥抱面记录您的用户访问令牌:

    git config --global credential.helper store
    huggingface-cli login
    
    

任务 3:创建对象存储存储桶

在数据科学记事本所在的区域和区间中创建对象存储桶。

任务 4:设置日志记录

创建日志组,然后创建定制日志

任务 5:使用数据科学的 AI 快速操作在 A10 GPU 配置上部署 LLM,无需微调

  1. 导航到数据科学记事本 > 启动器 > AI 快速操作

    a.搜索 Mistral 模型
    b。单击 mistralai/Mistral-7B-Instruct-v0.3 磁贴
    c。单击选择了以上日志的部署

  2. 模型部署大约需要 15 分钟。您可以通过选择在终端中打开日志来监视部署日志。

  3. 模型部署完成后,导航到部署 > < 您的刚刚部署的模型 > > 测试您的模型,并使用简单的问题(例如:

    Who wrote the Harry Potter book series?
    
    
  4. 一些简单的 LLM 无法正确回答以下测试问题,但是 Mistral-7B-Instruct-v0.3 在回答这些问题时做得相当不错:

    A bat and a ball cost $1.10 in total. The bat costs $1.00 more than the ball. How much does the ball cost?
    Every cat has four legs. My pet has four legs. Is my pet a cat?
    Who is President of the United States? 
    

任务 6:与已部署模型的端点交互

  1. 导航到部署 > < 刚刚部署的模型 > 调用您的模型以查看已部署模型的端点。然后,使用数据科学终端将该端点存储为 shell 变量。例如:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  2. 将提示发送到已部署模型的端点:

    prompt="Who is President of the United States?"
    request_body='{"model":"odsc-llm","prompt":"'$prompt'","max_tokens":100,"temperature":0.1,"top_k":50,"top_p":0.99,"stop":[],"frequency_penalty":0,"presence_penalty":0}'
    oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal
    
  3. 使用此 bash 循环在十秒内调用模型的端点 100 次:

    for i in $(seq 1 100); do
         oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal &
         echo $i
         sleep 0.1
      done
    
    
  4. 导航到 Deployments(部署) > <your just-deployed model> > Log(日志)以查看刚刚发送到模型端点的流量。

img.png

插图 log_traffic.png 的说明

任务 7:使用 AI 快速操作微调 LLM

以前的任务部署了不进行微调的 Mistral LLM。此任务将进行微调,然后部署相同的 LLM。任务 9 将比较两个模型的输出,优化和未优化。此任务和下一个任务还使用从此代码归档下载的两个 Jupyter 记事本。

  1. 使用 Data Science 记事本的文件浏览器导航到 quick-actions-demo-archive 文件夹并打开 prep_data.ipynb Jupyter 记事本。

  2. 选择 generalml_p311_cpu_x86_64_v1 内核。

  3. 修改记事本的第二个到最后一个段落,使其引用您的租户/名称空间和对象存储桶。

  4. 执行 prep_data.ipynb Jupyter 笔记本,这将:

    • 阅读文件 data/NvidiaDocumentationQandApairs.csv 中的 NVIDIA 常见问题解答
    • 将 CSV 常见问题重塑为 JSON 记录,其中包含 AI Quick Actions 预期的 promptcompletion 字段。
    • 将数据 90:10 分割成 train:test 样本。
    • 将训练样例推送到对象存储中的文件 quick_actions/tuning_data/tune_sample.jsonl 中。
  5. 导航到 AI 快速操作 > 模型 > mistralai/Mistral-7B-Instruct-v0.3。然后,使用以下设置单击微调

    • 对象存储路径 = quick_actions/tuning_data/tune_sample.jsonl
    • 验证拆分 = 20%
    • 结果对象存储路径 = quick_actions/tuning_results
    • 配置 = BM.GPU.A10.4(如果存在可用性)。否则使用 10.210.1 配置
    • 选择日志组日志
  6. 使用以下设置启用显示高级配置

    • batch_size = 64
    • sequence_len = 256
    • learning_rate = 0.000025
    • epochs = 12
  7. 在 A10.2 上微调大约需要 60 分钟,因此单击在终端中打开日志可监视微调作业的日志。

  8. 度量部分中查看经过微调的模型的学习曲线。一个经过良好调整的模型将有一个验证损失曲线,该曲线会随着时代的增加而下降,然后是高原。 img.png

插图 learning_curve.png 的说明

任务 8:部署经过微调的 LLM

  1. 使用以下设置导航到 AI 快速操作 > 优化模型 > < 刚刚优化的模型 > > 部署

    • 计算配置 = VM.GPU.A10.1
    • 选择日志组日志
  2. 单击在终端中打开日志以监视部署日志

任务 9:测试精细优化的 LLM 部署

  1. 模型部署完成后,导航到部署 > < 您的刚刚优化的模型 > > 测试您的模型,然后使用 prep_data.ipynb 记事本中显示的测试示例问题中的问题进行测试,例如:

    What benefits does Unified Memory bring to complex data structures and classes?
    
    
  2. 将模型端点复制/粘贴到终端会话的 shell 变量中:

    endpoint=https://modeldeployment.<region>.oci.customer-oci.com/<model_ocid>/predict
    
  3. 将提示发送到已部署模型的端点:

    prompt="What benefits does Unified Memory bring to complex data structures and classes?"
    request_body='{"model":"odsc-llm","prompt":"'$prompt'","max_tokens":100,"temperature":0.1,"top_k":50,"top_p":0.99,"stop":[],"frequency_penalty":0,"presence_penalty":0}'
    oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal
    
  4. 使用此 bash 循环可调用模型端点 100 次:

    for i in $(seq 1 100); do
       oci raw-request --http-method POST --target-uri $endpoint --request-body "$request_body" --auth resource_principal &
       echo $i
       sleep 0.1
    done
    
  5. 单击经过微调/部署的模型的日志以查看进入该模型端点的最新流量

  6. 打开 compare_models.ipynb Jupyter 记事本并更新第 [8] 段,以引用两个模型的端点(已优化和未优化)。

  7. 执行该笔记本,这将:

    • 阅读常见问题记录的测试示例。
    • 使用 python 将五个测试问题输入微调和未调优模型的端点,并比较其响应。
    • 注意第 [10] 段,其中说明了如何使用 python 调用已部署模型的端点,这非常简单: img.png

      插图 call_endpoint.png 的说明

  8. 查看本测试的主要发现:

    • 经过微调的 LLM 响应的语调、样式和长度与实际 NVIDIA 编写的常见问题解答相当相似。
    • 未经过优化的 LLM 响应更为详细,并且包含许多可能不正确的无关语句。
    • 优化的 LLM 与未优化的 LLM 的响应通常不正确,大致相同。
    • 对更大的数据集进行微调可能会提高其响应的准确性。

任务 10:删除资源

  1. 导航到 AI Quick Actions > Deployments(部署)并删除模型部署。

  2. 导航到 AI 快速操作 > 模型 > 优化模型并删除。

  3. 使用 OCI 控制台页面导航到 Data Science 记事本会话和终止

  4. 单击作业并删除微调作业。

  5. 删除数据科学项目。

  6. 使用 OCI 控制台页面导航到您的对象存储桶并删除它。

  7. 使用 OCI 控制台删除日志和日志组。

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心