- 博客(28)
- 收藏
- 关注
原创 清理gpu内存
这段代码的目的是清理不同硬件设备(如CUDA GPU、MacOS MPS、Intel XPU和华为NPU)的内存资源。它通过调用特定于每个硬件平台的清理函数,确保在运行PyTorch任务时释放未使用的内存,从而避免内存泄漏和资源浪费。这种多平台支持的设计使得代码能够适应不同的硬件环境,提高代码的通用性和灵活性。
2025-04-08 18:06:16
555
原创 PyTorch张量
PyTorch 是一个开源的机器学习库,张量(Tensor)是 PyTorch 中最基本的数据结构。张量可以看作是多维数组,它类似于 NumPy 中的 ndarray。张量可以存储数据,并且能够利用 GPU 加速计算,这是 PyTorch 在深度学习中非常重要的特性。数据类型:张量可以存储多种数据类型,如浮点数(float32、float64 等)、整数(int32、int64 等)等。例如,表示存储浮点数的张量。维度:张量的维度可以是任意的。
2025-04-04 19:10:33
924
原创 详解回溯算法
回溯(su)算法求解的问题本质上是根据选择穷举求解的问题。抽象地说,解决一个回溯问题,实际上就是遍历一棵决策树的过程,树的每个叶子节点存放着一个合法答案。你把整棵树遍历一遍,把叶子节点上的答案都收集起来,就能得到所有的合法答案。原理如下:从根节点出发深度遍历决策树,搜索到有解的分支时,继续向下搜索,搜索到无解的分支时,回退到上一步,顾名思义“回溯”。实际上回溯算法就是一个 N 叉树(决策树)的前序遍历加上后序遍历。
2025-03-27 16:24:43
665
原创 streamlit使用
当我们运行 streamlit run helloworld.py 时,主程序并不是我们的 app.py,而是 streamlit 启动脚本,它负责读取我们的 app.py,然后根据其中的内容渲染出页面(HTML)和对应的逻辑(JavaScript)。
2025-03-14 15:49:51
202
原创 NLTK和jieba
自然语言处理(NLP)领域是计算机科学领域与人工智能领域中的一个重要方向,主要研究方向是实现人与计算机之间用自然语言进行有效通信的各种理论和方法。在自然语言处理领域中,文本类型的数据占据着很大的市场,由于其自身具有半结构的特点,且自然语言的分类繁多,所以针对不同的语言Python分别提供了相应的库来处理,最常见的是处理英文的NLTK库,它自带的语料库都是英文的,由于中文要比英文的结构复杂得多,不适合用NLTK进行处理,所以提供了jieba库来更好地处理中文。
2025-03-09 20:51:13
683
原创 技术架构和工程架构区别
数据架构,这个会受到技术架构的影响,比如是否用了 Flink 流处理、需不需要 Redis 做缓存、要不要 Druid 做时序存储,各个业务是否拆库拆表,垂直分表还是水平分表。算是对技术架构的支撑,一部分在基础设施中,一部分在细节设计中。工程架构则广泛应用于复杂软件项目的开发中,通过分层设计、微服务架构等方式,将大型应用拆解成多个小型、独立的服务组件,每个组件负责特定的业务功能,相互协作驱动整个系统。多个方面,旨在通过组织人员和技术,以最低的成本满足需求和应对变化,保障软件的稳定高效运行。
2025-02-26 21:54:53
642
原创 docker部署GPU环境
从图中可以看到,CUDA Toolkit 已经运行在容器中,因此宿主机上不需要再安装 CUDA Toolkit。然后,安装 NVIDIA Container Toolkit,它允许 Docker 容器访问宿主机上的 GPU 资源。总结来说,通过以上步骤可以成功使用 Docker 部署 GPU 环境,并利用 GPU 加速你的应用程序。这里我们直接使用一个带 cuda 的镜像来测试,启动该容器并执行 nvidia-smi 命令。这是使用 GPU 的前提条件。如果安装正确,此命令将输出 GPU 的详细信息。
2025-02-25 22:02:47
392
原创 python高级用法之pydantic
是一个基于 Python 类型提示的数据验证库。它利用 Python 的类型注解来定义数据模型,并自动进行类型检查、数据验证和错误处理。它被一些顶级的Python模块所采用,其中特别包括Hugging Face、FastAPI和Langchain。
2025-02-12 00:14:07
306
原创 python高级用法之typing类型提示
typing是 Python 的一个标准库模块,用于支持类型提示(Type Hints)。类型提示允许你在代码中显式地声明变量、函数参数和返回值的类型,从而提高代码的可读性和可维护性。虽然 Python 是一种动态类型语言,但类型提示可以帮助开发人员更好地理解代码,并且可以被静态类型检查工具(如mypy)用来检查代码中的潜在错误。1.1. typing的优势优势提高代码可读性类型提示可以让其他开发者更快的理解你的代码,知道函数函数参数和返回值的类型。# 有类型提示# 业务逻辑提供更好的IDE支持。
2025-02-11 22:53:50
1144
原创 案例:用langchain实现一个翻译程序
Langchain Serve 实现Restfull API。实例化OpenAI聊天类。定义prompt模版。
2025-02-11 16:26:10
133
原创 Prompt 工程优化方
表示介绍(Intruction)、背景(Context)、输入数据(Input Data)和输出指标(Output Indicator),为AI系统提供了清晰的指导。这种结构化的沟通方式不仅提高了AI的工作效率,还确保了输出内容的质量,使其更符合用户的期望。Context(背景信息): 提供任务的背景信息,帮助AI理解任务的上下文和环境。示例:“文章应该结构清晰,包含引言、主体和结论。示例:“请考虑以下数据点:太阳能和风能的最新发展、政府对可持续能源项目的支持、以及可持续能源对减少温室气体排放的潜在影响。
2025-02-11 16:09:00
898
原创 Python之装饰器
Python 装饰器(Decorator)是一种设计模式,用于在不修改原有函数代码的情况下,动态地给函数添加新的功能。装饰器本质上是一个函数,它接收一个函数作为参数,并返回一个新的函数。装饰器是 Python 中一个非常强大的功能,可以用于在不修改原有函数代码的情况下,动态地给函数添加新的功能。通过合理使用装饰器,可以提高代码的复用性和可维护性,同时实现各种功能扩展。装饰器也可以接受参数,这需要在装饰器函数外再嵌套一层函数。可以将多个装饰器应用于同一个函数,装饰器的执行顺序是从内到外。
2025-02-10 17:17:07
344
原创 如何保证缓存和数据库一致性
在实际应用中,需要根据系统的业务需求、数据特点和性能要求等因素综合考虑,灵活运用各种技术手段,不断优化数据同步机制,以适应不断变化的业务环境和技术发展趋势。使用数据库更新通知机制,当数据库中的数据发生变化时,发送通知给缓存系统,从而及时更新缓存中的数据。:这种方法可能导致缓存中的数据成为脏数据,因为如果数据库更新失败,缓存中的数据将不一致。:先更新数据库,再删除缓存,禁止本链路再次查询该数据,防止缓存未删除时查询到旧数据。:这种方法可能导致缓存中的数据滞后,因为如果缓存更新失败,缓存中将保留旧数据。
2025-02-10 11:23:45
1688
原创 Redis混合持久化
Redis 的混合持久化是一种结合了 RDB(Redis Database Backup)和 AOF(Append Only File)两种持久化方式的策略,旨在提高数据的安全性和恢复速度,同时减少数据丢失的风险。当 Redis 重启时,它会首先加载 RDB 快照文件以快速恢复到快照时的状态,然后读取 AOF 文件,重放快照之后的所有写操作命令,以恢复到最新状态。:在混合持久化模式下,即使发生故障,也只会丢失最后一次快照之后的数据,而不是所有未持久化的数据。要启用混合持久化,您需要在。
2025-02-10 10:13:01
577
原创 (一) 初识OpenAI
提示词工程就是给LLM的输入,用于指导模型生成特定的输出或回答。目的是为模型提供一个任务的上下文,以便模型能够更准确地理解用户的意图,并生成相关的回应。示例与格式:结构化格式,包括问候、指令、角色设定、输入数据、输出指示、风格和语气、限制条件、结束语。使用案例:让模型理解特定情境下如何应用提示词(prompt)。通过学习这些案例,模型能够根据您提供的具体需求和目标,生成更加符合预期的输出。用户输入:用户输入通常是在模型学习或训练过程结束后,根据您的具体要求提供的。
2025-02-09 16:32:38
183
原创 高并发之接口限流算法总结!
计数器法是限流算法里最简单也是最容易实现的一种算法。比如我们规定,对于A接口来说,我们1分钟的访问次数不能超过100个。那么我们可以这么做:在一开始的时候,我们可以设置一个计数器counter,每当一个请求过来的时候,counter就加1,如果counter的值大于100并且该请求与第一个请求的间隔时间还在1分钟之内,那么说明请求数过多;
2024-12-18 19:22:02
932
原创 leedcode 数组题
情况2:mid为奇数时,如果单一元素出现在右侧,则有nums[mid]== nums[mid-1], 如1,1,2,2,3,4,4,则有left=mid+1。情况1:mid为偶数时,如果单一元素在mid右侧,则有nums[mid]==nums[mid+1], 如1,1,2,2,3,则有left = mid+1。相同的数字异或的结果必然是0,如2^2=0,线性遍历数组,对所有结果异或,那么最终的结果必然就是那个只出现一次的数字。以情况1和情况2如果不相等,则出现在另一侧(左侧),则有right=mid-1。
2024-11-24 13:27:58
140
原创 详解动态规划
对每个i=1,2,...,n-1,首先将钢条切割为长度为i和n-i的两段,接着求解这两段的最优切割收益ri,rn-i(每种方案的最优收益为两段的最优收益之和),这就构成了求解原问题的一种方案。分治算法和动态规划都是将大问题划分成多个子问题,递归地求解子问题,再将它们的解组合起来,求出原问题的解。就是可选择列表是什么(求解问题的方案有多少种方案,最优解就是从n种方案中选择最优方案),其次才能从所有可能的选择中求出最值,这本身就是递归树的选择过程。要凑出的金额amount在选择的过程是动态变化的,它就是状态。
2024-11-23 18:06:00
1316
原创 QPS和并发数的定义和区别
QPS(Query Per Second)是指服务器每秒处理的查询数量。是衡量系统吞吐量的一个常用指标。它表示服务器在一秒内能够处理的查询请求数量。QPS主要反映系统的吞吐能力,即系统处理请求的速度。并发数是指系统同时能处理的请求数量,反映了系统的负载能力。与QPS不同,并发数更侧重于系统同时处理多个请求的能力。
2024-11-13 20:31:34
896
原创 数字/人民币互转
我们从左到右读取每个字符,如果是数字就先记下来,如果是单位就将记下来的数组乘以相应的倍数加到总和中。如五百三十六=(500)+(30)+6。但对于后面带万和亿的上面情况显然不符合。例如五百三十六万六千零三,按照上面计算方法为(500)+(30)+(60000),其实正确的做法应该是(500+30+6)*10000才对。
2024-11-10 11:06:32
289
原创 MYSQL语句加锁分析
分析时需要确定使用的隔离级别是什么,以及索引条件是聚簇索引还是二级索引,还应该考虑加锁的类型是S锁(共享)还是X锁(排他锁)。
2024-10-09 17:17:33
775
原创 学习nginx配置,这一篇就够了
以下内容整理自《学习Nginx HTTP Server》一书,深入浅出的介绍了nginx配置文件语法及HTTP核心模块、rewrite等模块的语法和指令。第1章介绍了linux基础知识,linux初学者建议看一下,以便巩固下linux的知识。第2章介绍nginx的下载和安装,主要介绍了安装前的一些先决条件和编译时的配置选项,如有些编译选择已经默认开启,有些则是需要手动启用的。第3章介绍了配置文件语法及指令块的结构。第4、5章属于本书的重点,介绍了HTTP的配置和rewrite模块。
2024-02-29 14:57:58
1176
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人