llamafactory使用记录

(1)# 创建Python隔离环境

  conda create -n llama_factory python=3.10

  conda activate llama_factory

(2)# 安装核心依赖

  pip install torch==2.1.2 --index-url https://download.pytorch.org/whl/cu118

  pip install git+https://github.com/hiyouga/LLaMA-Factory.git

  # 为了安装依赖包,所以直接clone了这个库到本地

  cd /data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory/
  git clone https://github.com/hiyouga/LLaMA-Factory.git # 第一次的时候没有成功,第二次的时候 成功了

  cd /data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory/LLaMA-Factory/

  pip install -e ".[torch,metrics,deepspeed,flash-attn,bitsandbytes,vllm]"

  #检查是否安装成功

  llamafactory-cli version # Welcome to LLaMA Factory, version 0.9.4.dev0 安装成功

(3)数据准备

  (3.1)json格式,每个样本包括instruction,input和output

  例如:{"instruction": "法语问候翻译", "input": "早上好", "output": "Bonjour"}

  在我的研究中,我的instruction都是相同的,prompt设置。input是影像报告,output是希望预测的病理指标。我的output是多个病理指标。所以我的准备格式是这样的 

  [
    {
    "instruction": "你是一名专业的医学影像分析助手。请根据患者的影像所见、诊断结论和病灶结构化信息,预测以下四个病理指标的阴性和阳性:\n1. 病理指标A\n2. 病理指标B\n3. 病理指标C\n4. 病理指标D\n请严格按照'指标A:阴性,指标B:阳性,指标C:阴性,指标D:阳性'的格式输出结果。",
    "input": "影像所见:肺部可见磨玻璃结节,大小约1.2cm,边界清晰。诊断结论:疑似早期炎症。病灶信息:结节大小1.2cm,密度均匀,无分叶征,无毛刺征。",
    "output": "指标A:阴性,指标B:阴性,指标C:阳性,指标D:阴性"
    },
    {
    "instruction": "你是一名专业的医学影像分析助手。请根据患者的影像所见、诊断结论和病灶结构化信息,预测以下四个病理指标的阴性和阳性:\n1. 病理指标A\n2. 病理指标B\n3. 病理指标C\n4. 病理指标D\n请严格按照'指标A:阴性,指标B:阳性,指标C:阴性,指    标D:阳性'的格式输出结果。",
    "input": "影像所见:肝脏占位性病变,增强扫描呈快进快出。诊断结论:考虑恶性肿瘤。病灶信息:肿块大小3.5cm,边界不清,有坏死区域。",
    "output": "指标A:阳性,指标B:阳性,指标C:阴性,指标D:阳性"
    }
  ]

  重要!!!json文件确认好后,文件存放位置放在data文件夹下:/data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory/LLaMA-Factory/data/XXX.json

  同时,该目录下的data_info.json需要同步修改。比如,我的json文件是medical_classification_all_train.json,我的json文件中有instruction,input和output,我的json设置

  {
    "medical_classification_all_train": {        #这里是json文件的名字
    "file_name": "medical_classification_all_train.json",   # 这里是json文件全称
    "columns": {
      "prompt": "instruction",
      "query": "input",
      "response": "output",
      "history": ""
      }
    },
   "identity": {
    "file_name": "identity.json"
    },

  }

 (3.2)训练配置设置(.yaml)

  1).yaml文件的存放路径位于 /data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory/LLaMA-Factory/examples/train_lora/AAA.yaml

  2) .yaml里面包括 model、method、dataset、output、train的设置。

  其中,model是下载的大语言模型的位置,我的模型下载放到了RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory_Model/Qwen3-8B这里。关于模型下载,可以用魔塔,这里贴个图,需要下什么模型,就去官网找,然后他也会告诉你安装的代码

image

  所以,在yaml的model设置中,关于model_name_or_path,就填写大语言模型所在的路径

另外,tmplate的设置,可以看LLAMA-Factory官网的配置信息

image

 


  method常规设置即可

  dataset设置里面,dataset的设置就是训练集json文件的名称(注意不要.json的后缀)

  output设置里面,output_dir是你自定义的模型保存的位置

  设置好后,可以试着开始训练

(4)模型训练

  llamafactory-cli train "/data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory/LLaMA-Factory/examples/train_lora/llama3_lora_hcc_mvi.yaml"

(5)模型推理

  模型推理稍微复杂一点,因为对于验证集和测试集患者想批量处理,所以在linux系统环境下,需要先激活API,然后运行批处理的.py文件。

  首先,激活API可以在terminal直接输入:
  nohup llamafactory-cli api --model_name_or_path /data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory_Model/Qwen3-8B/ --adapter_name_or_path /data1/wangfang_data/RC_Collaboratives/project/fang.wang03/0_Models/LLaMA-Factory/LLaMA-Factory/models/medical_classification_all_lora/checkpoint-17900/ --template qwen3 --finetuning_type lora --service_name 0.0.0.0 &

  激活后,写进行批处理的python文件,.py文件中,核心是配置信息,链接到API

  # 配置
  API_URL = "http://localhost:8000/v1/chat/completions"
  HEADERS = {"Content-Type": "application/json"}

  def query_model(prompt):
    """向模型发送查询"""
    data = {
      "model": "default",
      "messages": [
        {"role": "user", "content": prompt}
      ],
    "temperature": 0.1,
    "max_tokens": 2048
  }

  try:
    response = requests.post(API_URL, headers=HEADERS, json=data, timeout=60)
    if response.status_code == 200:
      return response.json()["choices"][0]["message"]["content"]
    else:
      print(f"请求失败,状态码: {response.status_code}, 响应内容: {response.text}")
    return f"Error: {response.status_code}"
  except Exception as e:
    print(f"请求异常: {str(e)}")
    return f"Exception: {str(e)}"

 其他的就是读取json文件,设置好自己的输入、输出,然后在LLM这个环境下,运行这个.py文件即可。

posted @ 2025-11-13 15:48  王姑娘呀~  阅读(7)  评论(0)    收藏  举报