微调 Llama 3.2:让 AI 更好地读取医学图像

打印 上一主题 下一主题

主题 852|帖子 852|积分 2558

您是否想知道人工智能模子如何学习理解医学图像?今天,我将带您完成一个令人兴奋的项目:微调 Meta 的 Llama 3.2 Vision 模子来分析放射线图像。如果您不是技术专家,也不要担心 - 我会用简朴的术语来解释。
它是如何运作的?

想象一下,有一个人工智能助手可以查看 X 射线并提供详细的医学形貌。这正是我们在这里构建的。我们正在采用 Meta 强盛的 Llama 3.2 Vision 模子(一个 110 亿参数的 AI)并教它更好地理解医学图像。这就是有趣的地方:在训练之前,模子给出了医学图像的通用的、有些含糊的形貌。但颠末我们的微调过程后,它变得更加精确和专业,说话更像一个专业的放射技师。
这个过程就像通过例子来教门生一样。我们利用名为“Radiology_mini”的数据集,其中包罗与专家形貌配对的 X 射线图像。我们反复向模子展示这些内容,它学会了:


  • 辨认特定的医疗特性
  • 利用精确的医学术语
  • 像专业放射技师一样构建其响应
我们正在利用一种名为 LoRA(低秩适应)的巧妙技术,即使在单个 GPU 上也可以训练这个巨大的模子。将其视为教导模子更好地完成其工作,而无需重写其整个知识库。
这种转变是显着的。在训练之前,该模子给出了一样平常的临床观察效果,比方“这张射线照片似乎是上颌和下颌的全景…”训练之后,它提供了更有针对性和结构化的观察效果,比方“全景射线照片显示双侧动脉瘤性骨囊肿(ABC)” — 对于医疗专业人员来说更加精确和有效!
技术实施

让我们深入研究一下如何本身实现这一点。这是包罗代码的分步指南:
1. 设置与安装

首先,安装所需的包:
  1. pip install unsloth
  2. export HF_TOKEN=xxxxxxxxxxxxx  # Your Hugging Face token
复制代码
2. 完备代码

这是完备的实现,分为逻辑部门:
  1. import os
  2. from unsloth import FastVisionModel
  3. import torch
  4. from datasets import load_dataset
  5. from transformers import TextStreamer
  6. from unsloth import is_bf16_supported
  7. from unsloth.trainer import UnslothVisionDataCollator
  8. from trl import SFTTrainer, SFTConfig
  9. # Load the model
  10. model, tokenizer = FastVisionModel.from_pretrained(
  11.     "unsloth/Llama-3.2-11B-Vision-Instruct",
  12.     load_in_4bit = True,
  13.     use_gradient_checkpointing = "unsloth",
  14. )
  15. # Configure fine-tuning parameters
  16. model = FastVisionModel.get_peft_model(
  17.     model,
  18.     finetune_vision_layers     = True,
  19.     finetune_language_layers   = True,
  20.     finetune_attention_modules = True,
  21.     finetune_mlp_modules      = True,
  22.     r = 16,
  23.     lora_alpha = 16,
  24.     lora_dropout = 0,
  25.     bias = "none",
  26.     random_state = 3407,
  27.     use_rslora = False,
  28.     loftq_config = None,
  29. )
  30. # Load and prepare the dataset
  31. dataset = load_dataset("unsloth/Radiology_mini", split = "train")
  32. instruction = "You are an expert radiographer. Describe accurately what you see in this image."
  33. def convert_to_conversation(sample):
  34.     conversation = [
  35.         { "role": "user",
  36.           "content" : [
  37.             {"type" : "text",  "text"  : instruction},
  38.             {"type" : "image", "image" : sample["image"]} ]
  39.         },
  40.         { "role" : "assistant",
  41.           "content" : [
  42.             {"type" : "text",  "text"  : sample["caption"]} ]
  43.         },
  44.     ]
  45.     return { "messages" : conversation }
  46. converted_dataset = [convert_to_conversation(sample) for sample in dataset]
  47. # Configure the trainer
  48. FastVisionModel.for_training(model)
  49. trainer = SFTTrainer(
  50.     model = model,
  51.     tokenizer = tokenizer,
  52.     data_collator = UnslothVisionDataCollator(model, tokenizer),
  53.     train_dataset = converted_dataset,
  54.     args = SFTConfig(
  55.         per_device_train_batch_size = 2,
  56.         gradient_accumulation_steps = 4,
  57.         warmup_steps = 5,
  58.         max_steps = 30,
  59.         learning_rate = 2e-4,
  60.         fp16 = not is_bf16_supported(),
  61.         bf16 = is_bf16_supported(),
  62.         logging_steps = 1,
  63.         optim = "adamw_8bit",
  64.         weight_decay = 0.01,
  65.         lr_scheduler_type = "linear",
  66.         seed = 3407,
  67.         output_dir = "outputs",
  68.         report_to = "none",
  69.         remove_unused_columns = False,
  70.         dataset_text_field = "",
  71.         dataset_kwargs = {"skip_prepare_dataset": True},
  72.         dataset_num_proc = 4,
  73.         max_seq_length = 2048,
  74.     ),
  75. )
  76. # Train the model
  77. trainer_stats = trainer.train()
  78. # Test after training
  79. print("\nAfter training:\n")
  80. FastVisionModel.for_inference(model)
  81. image = dataset[0]["image"]
  82. instruction = "You are an expert radiographer. Describe accurately what you see in this image."
  83. messages = [
  84.     {"role": "user", "content": [
  85.         {"type": "image"},
  86.         {"type": "text", "text": instruction}
  87.     ]}
  88. ]
  89. input_text = tokenizer.apply_chat_template(messages, add_generation_prompt = True)
  90. inputs = tokenizer(
  91.     image,
  92.     input_text,
  93.     add_special_tokens = False,
  94.     return_tensors = "pt",
  95. ).to("cuda")
  96. text_streamer = TextStreamer(tokenizer, skip_prompt = True)
  97. _ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 128,
  98.                    use_cache = True, temperature = 1.5, min_p = 0.1)
  99. # Save and upload the model
  100. model.save_pretrained("lora_model")
  101. tokenizer.save_pretrained("lora_model")
  102. model.save_pretrained_merged("your-username/Llama-3.2-11B-Vision-Radiology-mini", tokenizer,)
  103. model.push_to_hub_merged("your-username/Llama-3.2-11B-Vision-Radiology-mini",
  104.                         tokenizer,
  105.                         save_method = "merged_16bit",
  106.                         token = os.environ.get("HF_TOKEN"))
复制代码

  • 模子加载:我们以 4 位精度加载预训练的 Llama 3.2 Vision 模子以节省内存。
  • 微调配置:我们可以微调各种模子组件,包括视觉层、语言层和注意力模块。
  • 数据集准备:代码将放射图像及其形貌转换为模子可以理解的对话格式。
  • 训练配置:我们利用具有特定参数的 SFTTrainer:


  • 每个装备的批量大小为 2
  • 4个梯度累积步骤
  • 最多 30 个训练步骤
  • 2e-4的学习率
  • 线性学习率调度器
\5. 模子生存:训练后,我们生存 LoRA 权重和模子的合并版本。
紧张性

这种技术在医疗保健范畴可能具有极高的价值:


  • 帮助放射科医生更高效地工作
  • 在专家接触有限的地区提供开端筛查
  • 造就医门生
  • 提供第二意见
技术栈

对于技术上的好奇,我们利用了几种现代工具来实现这一点:


  • Unsloth:一个让微调更高效的库
  • PyTorch:用于底层呆板学习操纵
  • Hugging Face:用于管理和共享训练后的模子
展望

这只是开始。随着这些模子不停改进并变得更加专业,它们可能成为医疗保健环境中的宝贵工具。然而,紧张的是要记住,它们的目标是帮助而不是取代人类医疗专业人员。
条件和资源

要运行此代码,您需要:


  • 具有至少 48GB VRAM 的 GPU(比方 RTX A6000)
  • Python 3.8+
  • Hugging Face 帐户和 API 令牌
  • 训练时间约5分钟
   提示:虽然这项技术令人兴奋,但它仍然是辅助人类专业知识的工具,而不是取代它。医疗保健的未来在于人类专业人员和人工智能助手之间的和谐合作。
  最后的提示


  • 在训练期间始终监控 GPU 内存利用环境
  • 从少量训练步骤开始来测试您的设置
  • 确保您的训练数据是高质量的并精确标记
  • 跟踪之前/之后的效果以衡量改进环境
请随意尝试超参数并使代码适应您的特定用例。医疗保健范畴的人工智能正在快速发展,而且还会有很大的创新空间。

如何学习AI大模子?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将紧张的AI大模子资料包括AI大模子入门学习头脑导图、精品AI大模子学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完备版的大模子 AI 学习资料已经上传CSDN,朋侪们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【包管100%免费】
一、全套AGI大模子学习路线

AI大模子时代的学习之旅:从底子到前沿,掌握人工智能的核心技能!

二、640套AI大模子陈诉合集

这套包罗640份陈诉的合集,涵盖了AI大模子的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模子感爱好的爱好者,这套陈诉合集都将为您提供宝贵的信息和启示。

三、AI大模子经典PDF籍

随着人工智能技术的飞速发展,AI大模子已经成为了当今科技范畴的一大热点。这些大型预训练模子,如GPT-3、BERT、XLNet等,以其强盛的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就优劣常不错的学习资源。

四、AI大模子贸易化落地方案


作为普通人,入局大模子时代需要连续学习和实践,不停进步本身的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的康健发展贡献力气。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

拉不拉稀肚拉稀

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表