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

Java多租户数据隔离实战指南:从Schema分离到动态SQL过滤的7种生产级方案

更多请点击 https://intelliparadigm.com第一章Java多租户数据隔离的核心原理与安全边界Java 多租户系统中数据隔离是保障租户间信息不可见、不可篡改的生命线。其核心原理在于**在数据访问层强制注入租户上下文**确保每次 SQL 查询、ORM 操作或缓存访问均绑定唯一租户标识Tenant ID从而从逻辑、会话、存储多个维度构筑纵深防御。租户上下文传递机制典型实现依赖 ThreadLocal 过滤器/拦截器在请求入口提取租户标识如通过 HTTP Header X-Tenant-ID 或子域名并绑定至当前线程上下文// TenantContext.java public class TenantContext { private static final ThreadLocalString CURRENT_TENANT new ThreadLocal(); public static void setTenantId(String tenantId) { CURRENT_TENANT.set(tenantId); // 安全每个请求独立线程 } public static String getTenantId() { return CURRENT_TENANT.get(); } public static void clear() { CURRENT_TENANT.remove(); // 必须在 Filter#doFilter 中 finally 调用 } }数据隔离策略对比策略实现方式安全优势运维风险共享数据库 独立 Schema每个租户对应一个 DB Schema连接时动态切换强隔离权限可精确到 Schema 级Schema 数量上限受限于数据库能力共享数据库 共享 Schema所有租户共用表SQL 自动追加 WHERE tenant_id ?资源利用率高弹性扩展友好依赖 ORM 拦截器全覆盖漏写即越权关键安全边界守则禁止任何硬编码租户 ID 的 DAO 方法调用所有查询必须经由 TenantAwareRepository 封装数据库连接池需支持运行时 schema 切换如 HikariCP AbstractRoutingDataSource全局启用 JPA Filter 或 MyBatis 插件自动注入 tenant_id 条件且默认开启第二章基于数据库层的租户隔离方案配置2.1 Schema分离模式多库多Schema的自动化建模与连接池路由核心设计思想将业务域映射为独立数据库实例 同库内隔离Schema实现租户级数据硬隔离与资源弹性伸缩。动态路由配置示例routing: tenants: - id: tenant-a datasource: ds-primary schema: schema_a - id: tenant-b datasource: ds-secondary schema: schema_b该YAML定义了租户ID到物理库逻辑Schema的双维度绑定关系驱动连接池在初始化时加载对应JDBC URL与默认schema。连接池路由策略基于ThreadLocal透传租户上下文如TenantContext.get()拦截DataSource.getConnection()按租户ID查表匹配目标schema复用HikariCP的addDataSourceProperty(currentSchema, schema)实现会话级schema切换2.2 表前缀隔离动态表名解析器与MyBatis多租户插件实战核心设计思路通过 MyBatis 插件拦截StatementHandler.prepare()在 SQL 解析阶段动态重写表名为{tenant_id}_table_name实现物理层面的租户数据隔离。关键代码实现public class TenantTableNamePlugin implements Interceptor { Override public Object intercept(Invocation invocation) throws Throwable { StatementHandler handler (StatementHandler) invocation.getTarget(); BoundSql boundSql handler.getBoundSql(); String sql boundSql.getSql(); String tenantId TenantContext.getCurrentTenant(); // 从上下文获取 String newSql sql.replaceAll((?i)\\bFROM\\s(\\w), FROM tenantId _$1); Field field boundSql.getClass().getDeclaredField(sql); field.setAccessible(true); field.set(boundSql, newSql); return invocation.proceed(); } }该插件利用反射修改 BoundSql 的原始 SQLtenantId来自线程绑定的TenantContext正则仅匹配顶层FROM子句避免误改子查询。租户表名映射对照租户ID用户表订单表tenant_atenant_a_usertenant_a_ordertenant_btenant_b_usertenant_b_order2.3 行级租户标识Tenant IDJPA/Hibernate多租户上下文注入与自动过滤机制上下文感知的Tenant ID注入通过ThreadLocal绑定当前租户ID并在Hibernate拦截器中自动注入public class TenantContext { private static final ThreadLocalString CURRENT_TENANT ThreadLocal.withInitial(() - null); public static void setTenantId(String tenantId) { CURRENT_TENANT.set(tenantId); } public static String getTenantId() { return CURRENT_TENANT.get(); } }该机制确保每个请求线程独占租户上下文避免跨租户数据污染CURRENT_TENANT初始为null强制显式设置提升安全性。自动WHERE过滤策略Hibernate 5.2 支持Filter与FilterDef声明式过滤定义全局过滤器FilterDef(name tenantFilter, parameters ParamDef(name tenantId, type string))在实体上启用Filter(name tenantFilter, condition tenant_id :tenantId)场景SQL效果租户A查询UserSELECT * FROM user WHERE tenant_id A租户B更新OrderUPDATE order SET status? WHERE id? AND tenant_id B2.4 数据库代理层隔离ShardingSphere多租户路由规则与审计日志集成多租户路由核心配置rules: - !SHARDING tables: t_order: actualDataNodes: ds_${tenant_id}.t_order_${order_id % 4} databaseStrategy: standard: shardingColumn: tenant_id shardingAlgorithmName: tenant_db_inline shardingAlgorithms: tenant_db_inline: type: INLINE props: algorithm-expression: ds_${tenant_id}该 YAML 定义了基于tenant_id的库级路由策略确保不同租户请求被精准分发至专属数据源。actualDataNodes中的动态插值支持运行时上下文注入是租户隔离的关键锚点。审计日志联动机制启用SQL_AUDIT_ENABLEDtrue开启全链路 SQL 审计通过ShadowRule拦截敏感操作并打标租户上下文审计事件自动携带tenant_id、执行耗时、客户端 IP 等元信息2.5 物理隔离增强KubernetesStatefulSet按租户分库部署与TLS双向认证配置租户级分库部署模型StatefulSet 为每个租户实例分配唯一、稳定的网络标识与存储卷实现数据库物理隔离apiVersion: apps/v1 kind: StatefulSet metadata: name: tenant-a-db spec: serviceName: tenant-a-headless replicas: 1 template: spec: containers: - name: postgres env: - name: POSTGRES_DB value: tenant_a_core # 租户专属数据库名该配置确保每个租户拥有独立 Pod、DNS 名如tenant-a-db-0.tenant-a-headless及 PVC杜绝跨租户数据混存。TLS 双向认证关键参数客户端与服务端均需验证对方证书链。核心配置如下组件必需证书验证目标PostgreSQL Serverserver.crt server.key ca.crt验证 client.crt 签发者是否在 ca.crt 中Tenant App Podclient.crt client.key ca.crt验证 server.crt 的 CN/SubjectAltName 是否匹配服务 DNS第三章应用服务层租户上下文治理配置3.1 ThreadLocalInheritableThreadLocal租户上下文透传与异步线程安全加固核心问题与演进动因多租户系统中主线程设置的租户ID在异步线程如CompletableFuture、线程池任务中丢失导致数据越权或路由错误。普通ThreadLocal无法跨线程传递而InheritableThreadLocal仅支持父子线程继承对ForkJoinPool或自定义线程池失效。增强型上下文管理器public class TenantContextHolder { private static final InheritableThreadLocalString tenantIdHolder new InheritableThreadLocal() { Override protected String childValue(String parentValue) { return parentValue; // 显式继承策略 } }; public static void setTenantId(String tenantId) { tenantIdHolder.set(tenantId); } public static String getTenantId() { return tenantIdHolder.get(); } public static void reset() { tenantIdHolder.remove(); } }该实现确保子线程自动继承租户IDchildValue()方法强化了可读性与可控性避免隐式 null 传播。异步透传兼容方案对比方案支持 CompletableFuture线程池适配成本内存泄漏风险InheritableThreadLocal❌需手动包装高需装饰 Executor低TransmittableThreadLocal✅官方增强低透明集成中需配合 remove3.2 Spring Security多租户认证授权联动OAuth2 Scope隔离与RBAC租户维度策略配置Scope与租户的双向绑定机制OAuth2资源服务器需将scope语义扩展为租户感知型权限单元例如read:ordertenant-a。Spring Security 6通过自定义OAuth2ExpressionAttributeSource实现动态解析。// 自定义Scope转换器注入TenantContext Bean public OAuth2ResourceServerConfigurerHttpSecurity.JwtDecoder jwtDecoder() { return jwtDecoder - jwtDecoder .jwtAuthenticationConverter(new TenantAwareJwtAuthenticationConverter()); }该转换器从JWTscope声明中提取租户ID如tenant-a后缀并注入SecurityContext供后续RBAC策略使用。租户级RBAC策略执行表租户ID角色允许Scope前缀数据行级约束tenant-aADMINmanage:*tenant-atenant_id tenant-atenant-bVIEWERread:*tenant-btenant_id IN (tenant-b)3.3 分布式链路中租户标识传递OpenTelemetry Context Carrier与Sleuth跨服务透传实践租户上下文透传的核心挑战在多租户微服务架构中需将tenant-id从入口网关贯穿至下游所有链路节点同时避免污染业务逻辑。OpenTelemetry 的Context抽象与 Sleuth 的Tracer集成提供了标准化载体。OpenTelemetry 自定义 Carrier 实现public class TenantTextMapCarrier implements TextMapSetterTenantTextMapCarrier { private final MapString, String carrier; public TenantTextMapCarrier(MapString, String carrier) { this.carrier carrier; } Override public void set(TenantTextMapCarrier carrier, String key, String value) { carrier.carrier.put(x-tenant-id, value); // 统一注入 HTTP header 键 } }该 Carrier 将租户 ID 注入标准 HTTP header确保跨进程传播时被下游 OpenTelemetry SDK 自动提取TextMapSetter接口适配 OTel 的上下文序列化协议兼容 gRPC 和 HTTP 协议栈。Sleuth 与 OpenTelemetry 共存方案能力维度Sleuth旧OTel Sleuth Bridge新租户字段注入需手动扩展TraceFilter通过BaggagePropagation原生支持跨语言兼容性限于 Java 生态符合 W3C Baggage 规范支持多语言第四章动态SQL与ORM框架级租户过滤配置4.1 MyBatis-Plus多租户插件深度定制条件构造器拦截、SQL重写与敏感字段脱敏联动租户上下文与动态条件注入通过自定义InnerInterceptor拦截StatementHandler在 SQL 构建阶段注入租户 ID 条件并同步触发字段级脱敏策略public class TenantDesensitizeInterceptor implements InnerInterceptor { Override public void beforePrepare(StatementHandler sh, Connection conn, int timeout) { // 1. 获取当前租户IDThreadLocal String tenantId TenantContextHolder.getTenantId(); // 2. 获取原始SQL并重写WHERE子句 BoundSql boundSql sh.getBoundSql(); String sql boundSql.getSql(); // 3. 若含敏感字段如id_card自动追加DES_ENCRYPT/DECRYPT包装 } }该拦截器在预编译前介入确保租户隔离与脱敏逻辑原子生效避免绕过。敏感字段映射规则表字段名脱敏类型租户隔离方式id_cardDES_ENCRYPTWHERE tenant_id ?phoneMD5_PREFIX_4JOIN tenant_info ON t.tenant_id ?4.2 JPA Criteria API租户感知查询构建泛型Repository抽象与动态Predicate注入泛型租户安全Repository骨架public interface TenantAwareRepository extends JpaRepositoryT, ID { default SpecificationT withTenant(String tenantId) { return (root, query, cb) - cb.equal(root.get(tenantId), tenantId); } }该接口通过默认方法注入租户过滤逻辑避免每个实体重复实现root.get(tenantId)要求实体统一声明Column(name tenant_id) private String tenantId;字段。动态Predicate组合策略运行时解析租户上下文如ThreadLocal或Spring SecurityContextHolder将withTenant()与业务Specification通过Specifications.where().and()链式叠加确保WHERE子句中tenant_id ?始终为最左前缀条件利于数据库索引下推4.3 QueryDSL多租户支持自定义QueryInterceptor与编译期租户字段注入配置核心拦截机制设计通过实现QueryInterceptor接口在查询构建阶段动态注入租户过滤条件public class TenantQueryInterceptor implements QueryInterceptor { Override public void intercept(QueryMetadata metadata) { // 自动添加 tenant_id currentTenantId 条件 metadata.addWhere(Expressions.asBoolean(true) .and(QUser.user.tenantId.eq(TenantContext.getCurrent()))); } }该拦截器在QuerydslJPAQuery执行前生效确保所有查询强制带上当前租户上下文避免跨租户数据泄露。编译期字段注入配置使用 QueryDSL 的QueryInit与自定义 APT 插件在生成 Q 类时自动添加租户字段约束配置项作用tenantField tenantId指定实体中租户标识字段名enforceTenantFilter true强制所有查询包含该字段谓词4.4 Hibernate Filter TenantId注解驱动的声明式过滤启用策略、生命周期管理与性能调优启用策略通过FilterDef和Filter声明全局过滤器并结合自定义TenantId注解实现租户上下文注入FilterDef(name tenantFilter, parameters ParamDef(name tenantId, type string)) Filter(name tenantFilter, condition tenant_id :tenantId) public class Order { ... }该配置在实体级别绑定过滤逻辑运行时由TenantContext.getCurrentTenantId()提供参数值避免硬编码。生命周期管理过滤器需在事务开启后、查询执行前动态启用使用Session.enableFilter(tenantFilter)显式激活配合 Spring AOP 在TenantId方法入口自动注册/清除性能调优关键点维度优化建议索引为tenant_id字段添加 B-tree 复合索引缓存禁用二级缓存中跨租户共享实体设置cacheablefalse第五章生产环境多租户隔离的演进路径与架构取舍从共享数据库到物理分库的渐进式改造某 SaaS 企业初期采用 schema 级租户隔离PostgreSQL单库承载 200 租户但因审计合规要求升级逐步迁移到按客户 ID 分片的物理分库集群。迁移中通过 Vitess 实现无停机路由切换并利用tenant_id字段自动注入策略规避越权查询。运行时隔离的关键控制点API 网关层强制校验 JWT 中的tenant_id并透传至下游服务ORM 层GORM v2启用全局BeforeFind钩子自动追加WHERE tenant_id ?消息队列Kafka按租户前缀分区如events-tenant-abc123资源配额与弹性调度实践func ApplyTenantQuota(ctx context.Context, tenantID string) { limits : getQuotaConfig(tenantID) // 从 etcd 动态加载 r : rate.NewLimiter(rate.Limit(limits.RPS), limits.Burst) ctx context.WithValue(ctx, quotaKey, r) }隔离方案对比分析维度Schema 隔离分库分表独立集群运维复杂度低中高跨租户故障影响高共享连接池中共享中间件零冷启动成本5s2min15min可观测性增强设计Trace 标签自动注入tenant_idxyz、isolation_levelschema、db_shardshard-07

相关文章:

Java多租户数据隔离实战指南:从Schema分离到动态SQL过滤的7种生产级方案

更多请点击: https://intelliparadigm.com 第一章:Java多租户数据隔离的核心原理与安全边界 Java 多租户系统中,数据隔离是保障租户间信息不可见、不可篡改的生命线。其核心原理在于**在数据访问层强制注入租户上下文**,确保每次…...

微服务架构下Docker官方镜像的终极适配指南:10个关键技巧

微服务架构下Docker官方镜像的终极适配指南:10个关键技巧 【免费下载链接】official-images Primary source of truth for the Docker "Official Images" program 项目地址: https://gitcode.com/gh_mirrors/of/official-images 在微服务架构快速发…...

如何用AISuite构建统一AI服务接口:终极组合模式应用指南

如何用AISuite构建统一AI服务接口:终极组合模式应用指南 【免费下载链接】aisuite Simple, unified interface to multiple Generative AI providers 项目地址: https://gitcode.com/GitHub_Trending/ai/aisuite AISuite是一个功能强大的统一接口库&#xf…...

StyleGAN3跨模型迁移学习终极指南:基于预训练权重的快速微调方法

StyleGAN3跨模型迁移学习终极指南:基于预训练权重的快速微调方法 【免费下载链接】stylegan3 Official PyTorch implementation of StyleGAN3 项目地址: https://gitcode.com/gh_mirrors/st/stylegan3 StyleGAN3作为Official PyTorch implementation的强大AI…...

【Java 25密封类模式实战指南】:20年架构师亲授5大高危误用场景与3步安全迁移法

更多请点击: https://intelliparadigm.com 第一章:Java 25密封类模式的核心演进与设计哲学 Java 25 将密封类(Sealed Classes)从预览特性正式升格为标准语言特性,并深度整合至类型系统与模式匹配生态中。其设计哲学不…...

联想ThinkEdge SE60n Gen 2边缘AI计算机解析

1. 联想ThinkEdge SE60n Gen 2无风扇边缘AI计算机深度解析联想最新发布的ThinkEdge SE60n Gen 2无风扇边缘AI计算机,代表了工业级边缘计算设备的技术前沿。这款搭载Intel Core Ultra 7 265H SoC的设备,在仅2.3kg的紧凑机身内实现了高达97 TOPS的AI算力&a…...

CUDA_LAUNCH_BLOCKING=1 之外:更优雅地定位PyTorch GPU异步报错(VSCode调试实战)

超越CUDA_LAUNCH_BLOCKING:PyTorch GPU异步报错高阶调试指南 当你在深夜盯着屏幕上突然弹出的RuntimeError: CUDA error: device-side assert triggered时,是否曾感到束手无策?设置CUDA_LAUNCH_BLOCKING1虽然能同步错误报告,但在大…...

DRV8301驱动板实战复盘:从原理图到PCB,我踩过的那些坑与优化方案

DRV8301驱动板实战复盘:从原理图到PCB,我踩过的那些坑与优化方案 在电机控制领域,DRV8301作为一款集成栅极驱动器和电源管理的三相无刷电机驱动器,因其高集成度和优秀的性能表现,成为许多工程师的首选。然而&#xff0…...

ai辅助pid开发:让快马平台智能推荐参数并生成优化控制结构代码

最近在做一个化工反应釜的温度控制项目,发现传统PID调参实在太费时间了。正好试用了InsCode(快马)平台的AI辅助开发功能,整个过程顺畅了很多。这里分享下AI如何帮我们解决非线性时变系统的控制难题。 被控对象特性分析 这个反应釜系统有几个头疼的特点&…...

DevOps工具集成终极指南:基于DevOps-Roadmap的Jenkins+Ansible实战方案

DevOps工具集成终极指南:基于DevOps-Roadmap的JenkinsAnsible实战方案 【免费下载链接】DevOps-Roadmap DevOps Roadmap for 2026. with learning resources 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Roadmap DevOps-Roadmap项目提供了2025…...

当电网遇上路网:如何用‘拥堵收费’和‘电价’引导用户行为?一个系统工程师的解读

电力与交通的协同博弈:用价格杠杆重塑城市能源流动 清晨七点半的都市高架桥上,电动汽车与燃油车混杂在早高峰的车流中,而几公里外的变电站正经历着用电负荷的陡升。这两个看似独立的系统——电网与路网——实际上正在上演一场精妙的双人舞。当…...

3分钟搞定Axure RP汉化:终极免费中文界面切换指南

3分钟搞定Axure RP汉化:终极免费中文界面切换指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英…...

RPG Maker全系列加密档案解密技术解决方案

RPG Maker全系列加密档案解密技术解决方案 【免费下载链接】RPGMakerDecrypter Tool for decrypting and extracting RPG Maker XP, VX and VX Ace encrypted archives and MV and MZ encrypted files. 项目地址: https://gitcode.com/gh_mirrors/rp/RPGMakerDecrypter …...

TypeChain增量生成机制:如何高效管理大型项目的类型定义

TypeChain增量生成机制:如何高效管理大型项目的类型定义 【免费下载链接】TypeChain 🔌 TypeScript bindings for Ethereum smart contracts 项目地址: https://gitcode.com/gh_mirrors/ty/TypeChain TypeChain是一个为以太坊智能合约生成TypeScr…...

终极Win11优化指南:用Win11Debloat轻松打造纯净高效系统

终极Win11优化指南:用Win11Debloat轻松打造纯净高效系统 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

Chaplin:5分钟搭建本地唇语识别系统,让电脑读懂你的唇语

Chaplin:5分钟搭建本地唇语识别系统,让电脑读懂你的唇语 【免费下载链接】chaplin A real-time silent speech recognition tool. 项目地址: https://gitcode.com/gh_mirrors/chapl/chaplin 还在为嘈杂环境无法语音输入而烦恼?Chaplin…...

HiveWE:魔兽争霸III地图编辑的革命性工具,让创意不再等待

HiveWE:魔兽争霸III地图编辑的革命性工具,让创意不再等待 【免费下载链接】HiveWE A Warcraft III world editor. 项目地址: https://gitcode.com/gh_mirrors/hi/HiveWE 你是否曾经在魔兽争霸III地图编辑中,因为加载缓慢、操作卡顿而失…...

如何快速上手Chatterbox语音合成:多语言TTS终极使用指南

如何快速上手Chatterbox语音合成:多语言TTS终极使用指南 【免费下载链接】chatterbox SoTA open-source TTS 项目地址: https://gitcode.com/GitHub_Trending/chatterbox7/chatterbox Chatterbox是一款顶尖的开源语音合成(TTS)项目&am…...

知识图谱对自然语言处理中深层语义分析的影响与启示

摘要本报告旨在系统性地探讨知识图谱(Knowledge Graph, KG)在表示、存储、抽取、融合、推理及问答等全生命周期中的关键技术,并深入分析这些技术如何对人工智能(AI)领域的自然语言处理(NLP)中的…...

如何快速将OFD转换为PDF:免费开源工具Ofd2Pdf完整指南

如何快速将OFD转换为PDF:免费开源工具Ofd2Pdf完整指南 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 在当今数字化办公环境中,OFD(Open Fixed-layout Document&am…...

信创验收倒计时!Java应用接入天数智芯DCU推理引擎的6小时攻坚实录(含麒麟V10+JDK17适配验证报告)

更多请点击: https://intelliparadigm.com 第一章:信创验收背景下Java AI推理引擎国产化集成概览 在信创(信息技术应用创新)工程全面落地与等保2.0、密评、国密算法强制要求趋严的背景下,Java生态中AI推理能力的国产化…...

MiGPT终极指南:3步将小爱音箱改造为智能AI语音助手

MiGPT终极指南:3步将小爱音箱改造为智能AI语音助手 【免费下载链接】mi-gpt 🏠 将小爱音箱接入 ChatGPT 和豆包,改造成你的专属语音助手。 项目地址: https://gitcode.com/GitHub_Trending/mi/mi-gpt 你是否想让家中的小爱音箱摆脱简单…...

AI专著写作新玩法:借助AI工具,快速产出20万字优质专著!

撰写学术专著,不仅考验了一名学者的学术能力,更是对其心理素质的严峻挑战。不同于论文写作可以依赖团队的支持,专著的写作通常是研究者独自进行的,从选题到框架、再到具体内容的构建与修改,几乎所有步骤都需要单打独斗…...

终极指南:如何使用theHarvester构建高效分布式扫描系统

终极指南:如何使用theHarvester构建高效分布式扫描系统 【免费下载链接】theHarvester E-mails, subdomains and names Harvester - OSINT 项目地址: https://gitcode.com/GitHub_Trending/th/theHarvester theHarvester是一款强大的开源情报收集工具&#…...

联发科设备终极刷机指南:MTKClient开源工具从入门到精通

联发科设备终极刷机指南:MTKClient开源工具从入门到精通 【免费下载链接】mtkclient MTK reverse engineering and flash tool 项目地址: https://gitcode.com/gh_mirrors/mt/mtkclient 想要解锁联发科设备的全部潜能?MTKClient这款开源刷机神器能…...

低查重的AI教材生成工具大揭秘,高效完成教材编写任务

谁没经历过编写教材的烦恼呢?盯着空白的文档发呆,往往半小时过去仍是毫无头绪。到底是先讲解概念,还是先用案例来说明?章节划分是依照逻辑还是根据课时?而且不断修改的大纲似乎总是无法符合课标,有时甚至出…...

避坑指南:在Ubuntu 22.04上用ipex-llm跑通Qwen1.5-7B-Chat-Int4模型的完整流程(含seen_tokens报错修复)

避坑指南:Ubuntu 22.04部署Qwen1.5-7B-Chat-Int4全流程实战 最近在部署Qwen1.5-7B-Chat-Int4模型时,发现不少同行都卡在了seen_tokens这个报错上。这其实是一个典型的版本兼容性问题,但解决它需要从环境搭建开始就做好规划。本文将分享一套经…...

Proxmox边缘计算容器化部署终极指南:10个轻量级服务快速配置技巧

Proxmox边缘计算容器化部署终极指南:10个轻量级服务快速配置技巧 【免费下载链接】Proxmox Proxmox VE Helper-Scripts 项目地址: https://gitcode.com/gh_mirrors/pr/Proxmox 在边缘计算场景中,高效部署和管理轻量级服务是提升系统性能的关键。P…...

终极Windows风扇控制指南:如何用FanControl实现专业级散热管理

终极Windows风扇控制指南:如何用FanControl实现专业级散热管理 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Tre…...

终极性价比指南:TRL大语言模型训练的硬件配置全解析

终极性价比指南:TRL大语言模型训练的硬件配置全解析 【免费下载链接】trl Train transformer language models with reinforcement learning. 项目地址: https://gitcode.com/GitHub_Trending/tr/trl TRL(Train transformer language models with…...