当前位置: 首页 > news >正文

【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型

前言

随着多模态大模型的发展,其不仅限于文字处理,更能够在图像、视频、音频方面进行识别与理解。医疗领域中,医生们往往需要对各种医学图像进行处理,以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合,那么这会极大地提升诊断效率。

项目目标

训练一个医疗多模态大模型,用于图像诊断。

刚好家里老爷子近期略感头疼,去医院做了脑部CT,诊断患有垂体瘤,我将尝试使用多模态大模型进行进一步诊断。

实现过程

1. 数据集准备

为了训练模型,需要准备大量的医学图像数据。通过搜索我们找到以下训练数据:

数据名称:MedTrinity-25M
数据地址:https://github.com/UCSC-VLAA/MedTrinity-25M
数据简介:MedTrinity-25M数据集是一个用于医学图像分析和计算机视觉研究的大型数据集。
数据来源:该数据集由加州大学圣克鲁兹分校(UCSC)提供,旨在促进医学图像处理和分析的研究。
数据量:MedTrinity-25M包含约2500万条医学图像数据,涵盖多种医学成像技术,如CT、MRI和超声等。
数据内容
该数据集有两份,分别是 25Mdemo25Mfull

25Mdemo (约162,000条)数据集内容如下:

25Mfull (约24,800,000条)数据集内容如下:

2. 数据下载

2.1 安装Hugging Face的Datasets库
pip install datasets
2.2 下载数据集
from datasets import load_dataset# 加载数据集
ds = load_dataset("UCSC-VLAA/MedTrinity-25M", "25M_demo", cache_dir="cache")

执行结果:

说明:

  • 以上方法是使用HuggingFace的Datasets库下载数据集,下载的路径为当前脚本所在路径下的cache文件夹。
  • 使用HuggingFace下载需要能够访问https://huggingface.co/ 并且在网站上申请数据集读取权限才可以。
  • 如果没有权限访问HuggingFace,可以关注一起AI技术公众号后,回复 “MedTrinity”获取百度网盘下载地址。
2.3 预览数据集
# 查看训练集的前1个样本
print(ds['train'][:1]) 

运行结果:

{'image': [<PIL.JpegImagePlugin.JpegImageFile image mode=RGB size=512x512 at 0x15DD6D06530>], 'id': ['8031efe0-1b5c-11ef-8929-000066532cad'], 'caption': ['The image is a non-contrasted computed tomography (CT) scan of the brain, showing the cerebral structures without any medical devices present. The region of interest, located centrally and in the middle of the image, exhibits an area of altered density, which is indicative of a brain hemorrhage. This area is distinct from the surrounding brain tissue, suggesting a possible hematoma or bleeding within the brain parenchyma. The location and characteristics of this abnormality may suggest a relationship with the surrounding brain tissue, potentially causing a mass effect or contributing to increased intracranial pressure.']
}

使用如下命令对数据集的图片进行可视化查看:

# 可视化image内容
from PIL import Image
import matplotlib.pyplot as pltimage = ds['train'][0]['image']  # 获取第一张图像plt.imshow(image)
plt.axis('off')  # 不显示坐标轴
plt.show()

运行结果:

3. 数据预处理

由于后续我们要通过LLama Factory进行多模态大模型微调,所以我们需要对上述的数据集进行预处理以符合LLama Factory的要求。

3.1 LLama Factory数据格式

查看LLama Factory的多模态数据格式要求如下:

[{"messages": [{"content": "<image>他们是谁?","role": "user"},{"content": "他们是拜仁慕尼黑的凯恩和格雷茨卡。","role": "assistant"},{"content": "他们在做什么?","role": "user"},{"content": "他们在足球场上庆祝。","role": "assistant"}],"images": ["mllm_demo_data/1.jpg"]}
]
3.2 实现数据格式转换脚本
from datasets import load_dataset
import os
import json
from PIL import Imagedef save_images_and_json(ds, output_dir="mllm_data"):"""将数据集中的图像和对应的 JSON 信息保存到指定目录。参数:ds: 数据集对象,包含图像和标题。output_dir: 输出目录,默认为 "mllm_data"。"""# 创建输出目录if not os.path.exists(output_dir):os.makedirs(output_dir)# 创建一个列表来存储所有的消息和图像信息all_data = []# 遍历数据集中的每个项目for item in ds:img_path = f"{output_dir}/{item['id']}.jpg"  # 图像保存路径image = item["image"]  # 假设这里是一个 PIL 图像对象# 将图像对象保存为文件image.save(img_path)  # 使用 PIL 的 save 方法# 添加消息和图像信息到列表中all_data.append({"messages": [{"content": "<image>图片中的诊断结果是怎样?","role": "user",},{"content": item["caption"],  # 从数据集中获取的标题"role": "assistant",},],"images": [img_path],  # 图像文件路径})# 创建 JSON 文件json_file_path = f"{output_dir}/mllm_data.json"with open(json_file_path, "w", encoding='utf-8') as f:json.dump(all_data, f, ensure_ascii=False)  # 确保中文字符正常显示if __name__ == "__main__":# 加载数据集ds = load_dataset("UCSC-VLAA/MedTrinity-25M", "25M_demo", cache_dir="cache")# 保存数据集中的图像和 JSON 信息save_images_and_json(ds['train'])

运行结果:

4. 模型下载

本次微调,我们使用阿里最新发布的多模态大模型:Qwen2-VL-2B-Instruct 作为底座模型。
模型说明地址:https://modelscope.cn/models/Qwen/Qwen2-VL-2B-Instruct

使用如下命令下载模型

git lfs install
# 下载模型
git clone https://www.modelscope.cn/Qwen/Qwen2-VL-2B-Instruct.git

5. 环境准备

5.1 机器环境

硬件:

  • 显卡:4080 Super
  • 显存:16GB

软件:

  • 系统:Ubuntu 20.04 LTS
  • python:3.10
  • pytorch:2.1.2 + cuda12.1
5.2 准备虚拟环境
# 创建python3.10版本虚拟环境
conda create --name train_env python=3.10# 激活环境
conda activate train_env# 安装依赖包
pip install streamlit torch torchvision# 安装Qwen2建议的transformers版本
pip install git+https://github.com/huggingface/transformers

6. 准备训练框架

下载并安装LLamaFactory框架的具体步骤,请见【课程总结】day24(上):大模型三阶段训练方法(LLaMa Factory)中 准备训练框架 部分内容,本章不再赘述。

6.1 修改LLaMaFactory源码以适配transformer

由于Qwen2-VL使用的transformer的版本为4.47.0.dev0,LLamaFactory还不支持,所以需要修改LLaMaFactory的代码,具体方法如下:

第一步:在 llamafactory 源码中,找到 check_dependencies() 函数,这个函数位于 src/llamafactory/extras/misc.py 文件的第 82 行。

第二步:修改 check_dependencies() 函数并保存

# 原始代码
require_version("transformers>=4.41.2,<=4.45.2", "To fix: pip install transformers>=4.41.2,<=4.45.2")
# 修改后代码
require_version("transformers>=4.41.2,<=4.47.0", "To fix: pip install transformers>=4.41.2,<=4.47.0")

第三步:重新启动LLaMaFactory服务

llamafactory-cli webui

这个过程可能会提示 ImportError: accelerate>=0.34.0 is required for a normal functioning of this module, but found accelerate==0.32.0.
如遇到上述问题,可以重新安装accelerate,如下:

# 卸载旧的 accelerate
pip uninstall accelerate# 安装新的 accelerate
pip install accelerate==0.34.0

7. 测试当前模型

第一步:启动LLaMa Factory后,访问http://0.0.0.0:7860

第二步:在web页面配置模型路径为 4.步骤 下载的模型路径,并点击加载模型

第三步:上传一张CT图片并输入问题:“请使用中文描述下这个图像并给出你的诊断结果”

由上图可以看到,模型能够识别到这是一个CT图像,显示了大概的位置以及相应的器官,但是并不能给出是否存在诊断结果。

8. 模型训练

8.1 数据准备

第一步:将 3.2步骤 生成的mllm_data文件拷贝到LLaMaFactory的data目录下

第二步:将 4.步骤 下载的底座模型Qwen2-VL 拷贝到LLaMaFactory的model目录下

第三步:修改 LLaMaFactory data目录下的dataset_info.json,增加自定义数据集:

  "mllm_med": {"file_name": "mllm_data/mllm_data.json","formatting": "sharegpt","columns": {"messages": "messages","images": "images"},"tags": {"role_tag": "role","content_tag": "content","user_tag": "user","assistant_tag": "assistant"}},
8.2 配置训练参数

访问LLaMaFactory的web页面,配置微调的训练参数:

  • Model name: Qwen2-VL-2B-Instruct
  • Model path: models/Qwen2-VL-2B-Instruct
  • Finetuning method: lora
  • Stage : Supervised Fine-Tuning
  • Dataset: mllm_med
  • Output dir: saves/Qwen2-VL/lora/Qwen2-VL-sft-demo1

配置参数中最好将 save_steps 设置大一点,否则训练过程会生成非常多的训练日志,导致硬盘空间不足而训练终止。

点击Preview Command预览命令行无误后,点击Run按钮开始训练。
训练参数

llamafactory-cli train \--do_train True \--model_name_or_path models/Qwen2-VL-2B-Instruct \--preprocessing_num_workers 16 \--finetuning_type lora \--template qwen2_vl \--flash_attn auto \--dataset_dir data \--dataset mllm_med \--cutoff_len 1024 \--learning_rate 5e-05 \--num_train_epochs 3.0 \--max_samples 100000 \--per_device_train_batch_size 2 \--gradient_accumulation_steps 8 \--lr_scheduler_type cosine \--max_grad_norm 1.0 \--logging_steps 5 \--save_steps 3000 \--warmup_steps 0 \--optim adamw_torch \--packing False \--report_to none \--output_dir saves/Qwen2-VL-2B/full/Qwen2-VL-sft-demo1 \--bf16 True \--plot_loss True \--ddp_timeout 180000000 \--include_num_input_tokens_seen True \--lora_rank 8 \--lora_alpha 16 \--lora_dropout 0 \--lora_target all

训练过程

训练的过程中,可以通过 watch -n 1 nvidia-smi 实时查看GPU显存的消耗情况。

经过35小时的训练,模型训练完成,损失函数如下:

损失函数一般降低至1.2左右,太低会导致模型过拟合。

8.3 合并导出模型

接下来,我们将 Lora补丁原始模型 合并导出:

  1. 切换到 Expert 标签下
  2. Model path: 选择Qwen2-VL的基座模型,即:models/Qwen2-VL-2B-Instruct
  3. Checkpoint path: 选择lora微调的输出路径,即 saves/Qwen2-VL/lora/Qwen2-VL-sft-demo1
  4. Export path:设置一个新的路径,例如:Qwen2-VL-sft-final
  5. 点击 开始导出 按钮


导出完毕后,会在LLaMaFactory的根目录下生成一个 Qwen2-VL-sft-final 的文件夹。

9. 模型验证

9.1 模型效果对比

第一步:在LLaMa Factory中卸载之前的模型

第二步:在LLaMa Factory中加载导出的模型,并配置模型路径为 Qwen2-VL-sft-final

第三步:加载模型并上传之前的CT图片提问同样的问题


可以看到,经过微调后的模型,可以给出具体区域存在的可能异常问题。

9.2 实际诊断

接下来,我将使用微调后的模型,为家里老爷子的CT片做诊断,看看模型给出的诊断与大夫的异同点。

我总计测试了CT片上的52张局部结果,其中具有代表性的为上述三张,可以看到模型还是比较准确地诊断出:脑部有垂体瘤,可能会影响到眼部。这与大夫给出的诊断和后续检查方案一致。

不足之处

训练集:

  • 多模态:本次训练只是采用了MedTrinity-25Mdemo数据集,如果使用MedTrinity-25Mfull数据集,效果应该会更好。
  • 中英文:本次训练集中使用的MedTrinity-25Mdemo数据集,只包含了英文数据,如果将英文标注翻译为中文,提供中英文双文数据集,相信效果会更好。
  • 对话数据集:本次训练只是使用了多模态数据集,如果增加中文对话(如:中文医疗对话数据-Chinese-medical-dialogue),相信效果会更好。

前端页面:

  • 前端页面:本次实践曾使用streamlit构建前端页面,以便图片上传和问题提出,但是在加载微调后的模型时,会出现:ValueError: No chat template is set for this processor 问题,所以转而使用LLaMaFactory的web页面进行展示。
  • 多个图片推理:在Qwen2-VL的官方指导文档中,提供了 Multi image inference 方法,本次未进行尝试,相信将多个图片交给大模型进行推理,效果会更好。

内容小结

  • Qwen2-VL-2B作为多模态大模型,具备有非常强的多模态处理能力,除了能够识别图片内容,还可以进行相关的推理。
  • 我们可以通过 LLaMaFactory 对模型进行微调,使得其具备医疗方面的处理能力。
  • 微调数据集采用开源的MedTrinity-25M数据集,该数据集有两个版本:25Mdemo和25Mfull。
  • 训练前需要对数据集进行预处理,使得其适配LLaMaFactory的微调格式。
  • 经过微调后的多模态大模型,不但可以详细地描述图片中的内容,还可以给出可能的诊断结果。

相关文章:

【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型

前言 随着多模态大模型的发展&#xff0c;其不仅限于文字处理&#xff0c;更能够在图像、视频、音频方面进行识别与理解。医疗领域中&#xff0c;医生们往往需要对各种医学图像进行处理&#xff0c;以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合&#xff0c;那么这会…...

SCSI驱动与 UFS 驱动交互概况

SCSI子系统概况 SCSI&#xff08;Small Computer System Interface&#xff09;子系统是 Linux 中的一个模块化框架&#xff0c;用于提供与存储设备的通用接口。通过 SCSI 子系统&#xff0c;可以支持不同类型的存储协议&#xff08;如 UFS、SATA、SAS&#xff09;&#xff0c…...

软件工程实践项目:人事管理系统

一、项目的需求说明 通过移动设备登录app提供简单、方便的操作。根据公司原来的考勤管理制度&#xff0c;为公司不同管理层次提供相应的权限功能。通过app上面的各种标准操作&#xff0c;考勤管理无纸化的实现&#xff0c;使公司的考勤管理更加科学规范&#xff0c;从而节省考…...

不使用三方软件,win系统下禁止单个应用联网能力的详细操作教程

本篇文章主要讲解&#xff0c;在win系统环境下&#xff0c;禁止某个应用联网能力的详细操作教程&#xff0c;通过本教程您可以快速掌握自定义对单个程序联网能力的限制和禁止。 作者&#xff1a;任聪聪 日期&#xff1a;2024年10月30日 步骤一、按下win按键&#xff08;四个小方…...

近似线性可分支持向量机的原理推导

近似线性可分的意思是训练集中大部分实例点是线性可分的&#xff0c;只是一些特殊实例点的存在使得这种数据集不适用于直接使用线性可分支持向量机进行处理&#xff0c;但也没有到完全线性不可分的程度。所以近似线性可分支持向量机问题的关键就在于这些少数的特殊点。 相较于…...

Golang开发环境

Golang开发环境搭建 Go 语言开发包 国外&#xff1a;https://golang.org/dl/ 国内(推荐)&#xff1a; https://golang.google.cn/dl/ 编辑器 Golang:https://www.jetbrains.com/go/ Visual Studio Code: https://code.visualstudio.com/ 搭建 Go 语言开发环境&#xff0c;需要…...

测试华为GaussDB(DWS)数仓,并通过APISQL快速将(表、视图、存储过程)发布为API

华为数据仓库服务 数据仓库服务&#xff08;Data Warehouse Service&#xff0c;简称DWS&#xff09;是一种基于公有云基础架构和平台的在线数据处理数据库&#xff0c;提供即开即用、可扩展且完全托管的分析型数据库服务。DWS是基于华为融合数据仓库GaussDB产品的云原生服务&a…...

使用GetX实现GetPage中间件

前言 GetX 中间件&#xff08;Middleware&#xff09;是 GetX 框架中的一种机制&#xff0c;用于在页面导航时对用户进行权限控制、数据预加载、页面访问条件设置等。通过使用中间件&#xff0c;可以有效地控制用户的访问流程&#xff0c;并在适当条件下引导用户到所需页面。 这…...

Navicat 17 功能简介 | SQL 预览

Navicat 17 功能简介 | SQL 预览 随着 17 版本的发布&#xff0c;Navicat 也带来了众多的新特性&#xff0c;包括兼容更多数据库、全新的模型设计、可视化智能 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展MongoDB 功能、轻松固定查询结果、便捷URI …...

ubuntu、Debian离线部署gitlab

一、软件包下载 gitlab安装包下载链接 ubuntu&#xff1a; ubuntu/focal 适用于 ubuntu20系列 ubuntu/bionic 适用于 ubuntu18 系列 Debian&#xff1a; debian/buster 适用于 Debian10系列 debian/bullseye 适用于 Debian11、12系列 二、安装gitlab ubuntu需要安装一些环境…...

数据库编程 SQLITE3 Linux环境

永久存储程序数据有两种方式&#xff1a; 用文件存储用数据库存储 对于多条记录的存储而言&#xff0c;采用文件时&#xff0c;插入、删除、查找的效率都会很差&#xff0c;为了提高这些操作的效率&#xff0c;有计算机科学家设计出了数据库存储方式 一、数据库 数据库的基本…...

独孤思维:总有一双眼睛默默观察你做副业

01 独孤昨天在陪伴群&#xff0c;分享了近期小白做副业的一些困扰。 并且以自己经历作为案例&#xff0c;分享了一些经验和方法。 最后顺势推出xx博主的关于365条赚钱信息小报童专栏。 订阅后&#xff0c;可以开拓副业赚钱思路&#xff0c;避免走一些弯路。 甚至于&#x…...

医院信息化与智能化系统(10)

医院信息化与智能化系统(10) 这里只描述对应过程&#xff0c;和可能遇到的问题及解决办法以及对应的参考链接&#xff0c;并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图&#xff0c;可以试试PlantUML&#xff0c;告诉GPT你的文件结构&#xff0c;让他给你对应…...

基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…...

Flink CDC系列之:学习理解核心概念——Transform

Flink CDC系列之&#xff1a;学习理解核心概念——Transform Transform参数元数据字段函数比较函数逻辑函数字符串函数时间函数条件函数 示例添加计算列参考元数据列使用通配符投影所有字段添加过滤规则重新分配主键重新分配分区键指定表创建配置分类映射用户定义函数已知限制 …...

MyBatis-Plus:简化 CRUD 操作的艺术

一、关于MyBatis-Plus 1.1 简介 MyBatis-Plus 是一个基于 MyBatis 的增强工具&#xff0c;它旨在简化 MyBatis 的使用&#xff0c;提高开发效率。 ​ ‍ ‍ ‍ ​ ‍ 关于Mybatis 简介 MyBatis 是一款流行的 Java 持久层框架&#xff0c;旨在简化 Java 应用程序与数…...

Windows on ARM编译安装openBLAS

Windows on ARM编译安装openBLAS 要求下载源码OpenBLAS可以使用LLVM工具链(clang-cl和flang)从源代码为Windows on ARM(WoA)进行构建。v0.3.24版本(预构建包)的构建和测试已通过。 要求 LLVM:版本需大于等于17.0.4 LLVM版本16及以下会生成冲突的符号(如_QQ*等)。 LL…...

FPGA编程语言VHDL与Verilog的比较分析!!!

VHDL&#xff08;VHSIC硬件描述语言&#xff09;和Verilog都是用于硬件描述和FPGA编程的工业标准语言。它们在语法和设计理念上存在一些差异&#xff0c;以下是两者的比较分析&#xff1a; 1. 历史背景 VHDL&#xff1a; 开发于1980年代初期&#xff0c;最初用于美国国防部的…...

C语言——八股文(笔试面试题)

1、 什么是数组指针&#xff0c;什么是指针数组&#xff1f; 数组指针&#xff1a;指向数组的指针 指针数组&#xff1a;数组中的元素都是指针 2、 什么是位段&#xff0c;什么是联合体 位段&#xff08;Bit Field&#xff09;&#xff1a;在C语言中&#xff0c;允许在一个整数…...

解决 Oracle 数据库错误 ORA-12516:监听器无法找到匹配协议栈的处理程序

在使用 Oracle 数据库时&#xff0c;有时会遇到错误 ORA-12516&#xff0c;这个错误表明 Oracle 数据库的监听器无法为新的连接请求找到一个可用的处理程序&#xff0c;这通常是因为达到了连接数上限、配置问题或资源限制。本文将详细介绍如何解决这个问题。 一、错误描述 当…...

Flarum:简洁而强大的开源论坛软件

Flarum简介 Flarum是一款开源论坛软件&#xff0c;以其简洁、快速和易用性而闻名。它继承了esoTalk和FluxBB的优良传统&#xff0c;旨在提供一个不复杂、不臃肿的论坛体验。Flarum的核心优势在于&#xff1a; 快速、简单&#xff1a; Flarum使用PHP构建&#xff0c;易于部署&…...

方法+数组

1. 方法 1. 什么是方法 方法定义&#xff1a; // []表示可写可不写[public] [static] type name ( [type formal , type formal , ...]){方法体&#xff1b;[return value ;] }[修饰符] 返回值类型 方法名称([参数类型 形参 , 参数类型 形参 ...]){方法体代码;[return 返回值…...

驱动-----adc

在key1.c的基础上进行对adc1.c进行编写 首先将文件里面的key全部改为adc 再修改一下设备号 按键和adc的区别是什么,按键只需要按一下就触发了,并且不需要返回一个值出来, adc要初始化,启动,返回值 以下是裸机adc的代码: #include <s3c2440.h> #include "ad…...

js实现点击图片,使图片跟随鼠标移动(把注释打开是图片随机位置)

代码&#xff1a; <!DOCTYPE html> <html lang"zh-CN"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title>&l…...

MacOS的powermetrics命令查看macbook笔记本的耗能情况,附带查看ANE的工作情况

什么是 powermetrics&#xff1f; powermetrics 是 macOS 系统自带的一个命令行工具&#xff0c;用于收集和分析系统能源消耗数据。通过它&#xff0c;我们可以深入了解 Mac 的硬件性能、软件行为以及能源使用情况&#xff0c;从而优化系统配置&#xff0c;提高电池续航时间。…...

字符串函数

大家好&#xff0c;今天我们来了解几个字符串函数 1.strcpy函数 这个函数是一个字符串复制函数&#xff0c;其全称为string copy&#xff0c;它可以将一个源字符数组的内容复制到目标字符数组中&#xff0c;我们需要关注几个问题&#xff0c;首先源字符串必须以&#xff3c;0…...

Java数组的地址和元素访问 C语言空指针与野指针

1. public static void main(String[] args) {int []arr{1,2,3,4,5};int numarr[0];System.out.println(num);System.out.println(arr[1]);System.out.println(arr);//[I610f87f48//[表示地址 I表示数据类型 表示间隔符号&#xff08;固定格式&#xff09;//10f87f48表示地址…...

如何在Linux系统中使用SSH进行安全连接

如何在Linux系统中使用SSH进行安全连接 SSH简介 安装SSH 在Debian/Ubuntu系统中安装 在CentOS/RHEL系统中安装 启动SSH服务 验证SSH是否安装成功 SSH配置 配置监听端口 配置登录方式 SSH客户端 安装SSH客户端 使用SSH客户端 SSH密钥认证 生成SSH密钥对 复制公钥到远程服务器…...

Pandas 数据可视化指南:从散点图到面积图的全面展示

Pandas 数据可视化指南&#xff1a;从散点图到面积图的全面展示 本文介绍了使用 Pandas 进行数据可视化的多种方法&#xff0c;包括散点图、折线图、条形图、直方图、饼图和面积图等&#xff0c;涵盖了常见的图表类型及其实现方式。通过提供详细的代码示例&#xff0c;展示了如…...

Flink + Kafka 实现通用流式数据处理详解

Flink Kafka 实现通用流式数据处理详解 在大数据时代&#xff0c;实时数据处理和分析成为企业快速响应市场变化、提高业务效率和优化决策的关键技术。Apache Flink和Apache Kafka作为两个重要的开源项目&#xff0c;在数据流处理领域具有广泛的应用。本文将深入探讨Flink和Ka…...

常州网站设计平台/可靠的网站优化

本文由站长之家内容合作伙伴 开源中国授权发布Hired 网站近日发布了“2019 年软件工程师现状”报告&#xff0c;亮点颇多。该报告数据由 Hired 数据科学团队收集与分析&#xff0c;覆盖了 13 个城市的 98 000 名求职软件工程师&#xff0c;反映了过去一年超过 170 000 个面试申…...

番禺网站制作企业/引流客户的最快方法是什么

用了mybatis很长一段时间了&#xff0c;但是感觉用的都是比较基本的功能&#xff0c;很多mybatis相对ibatis的新功能都没怎么用过。比如其内置的注解功能之类的。这次遇到了一个问题&#xff0c;每次我们在配置mybaits时&#xff0c;需要在mapping.sql.xml文件中写对应的执行sq…...

网站建设建议/google搜索优化方法

本文介绍了三大主题&#xff1a;自动化持续集成/持续部署(CI/CD)配置、使用Git代码仓库用于常见的CI/CD工件以及参数化Jenkins管道。 术语介绍 先不妨定义几个术语。CI/CD是一种让团队可以快速自动测试、打包和部署应用程序的实践。它常常通过利用名为Jenkins的服务器来实现&am…...

网站建设应用后台/免费男女打扑克的软件

我有一個問題&#xff0c;我似乎無法包住我的頭。 在Animate CC Canvas IDE中&#xff0c;我使用多個框架創建了一個Movieclip&#xff0c;並且在每個框架上都是另一個嵌套的動畫片段&#xff0c;並且還包含其他動畫片段(全部使用實例名稱&#xff0c;而mainMc通過addChild()添…...

网站里图片的作用/百度公司总部地址

呼喊是爆发的沉默 沉默是无声的召唤 不论激越 不是宁静 我祈求 只要不是平淡 如果远方呼喊我 我就走向远方 如果大山召唤我 我就走向大山 双脚磨破 干脆再让夕阳涂抹小路 双手划烂 索性就让荆棘变成杜鹃 没有比脚更长的路 没有比人更高的山 转载于:https://www.cnblogs.com/lel…...

做网站商城/网络渠道有哪些

人工智能技术的发展和应用对社会产生的影响非常大&#xff0c;尤其是近期接连而来ChatGPT&#xff0c;GPT4&#xff0c;让很多圈外人都对人工智能产生了更大的兴趣&#xff0c;人工智能技术带给我们方便的同时&#xff0c;也带给了我们焦虑&#xff0c;大家都在思考一个问题&am…...