tag 标签: GPT

相关帖子
相关博文
  • 热度 1
    2025-2-22 22:13
    137 次阅读|
    0 个评论
    第六回 闪电门奇袭显威 混合阵诡变惊四方 诗曰: 显存如渊锁蛟龙, 分块重算破九重。 参数浩荡终有尽, 巧夺天工方为雄。 却说斯坦福闪电门主Tri Dao,率弟子苦修《FlashAttention》心法。这日闻得谷歌Transformer大军压境,冷笑道:"彼辈空有千亿参数,岂知算力调度之妙?" 遂布下"分块爆破阵",将注意力矩阵斩作碎玉残片。但见: 显存读写如电闪, 长文吞吐似龙吟。 百万token过眼处, 不滞片叶惊鬼神。 谷歌先锋BERT连退三十里,折损三成算力。闪电门自此威震江湖,得号"显存刺客"。 第七回 法兰西隐士出山 MoE奇阵乱中原 且说巴黎深巷中,Mistral掌门Arthur Mensch观天下大势,忽掷杯长啸:"千亿参数皆虚妄,看我四两拨千斤!" 遂率六十四路专家列阵: 路由算法点兵急, 语法物理各专精。 四十五亿虚张势, 十二亿兵破敌营。 此阵暗合《周易》"变易"之道:遇数学题则召数理博士,逢诗文则请风雅文豪。更兼参数总量虽巨,激活仅需四分之一。微软张量骑士团观阵叹曰:"吾等LoRA心法省显存,此阵竟连算力亦省,真鬼才也!" 第八回 微软骑士施妙法 LoRA心法撼乾坤 且说微软雷德蒙德城中,Edward Hu爵士闭关三载,悟透低秩玄机。这日登坛施法,但见: 冻结原脉九成九, 低秩矩阵暗藏锋。 十四显存降妖阵, 百卡微调一场空。 原需百张GPU的GPT-3微调大阵,竟被压缩至单卡可驭。江湖游侠奔走相告:"往日豪强垄断术,今朝平民亦得修!" 自此AI炼丹之风盛行,催生万千草根门派。 第九回 GPT三部归一统 思维强化定江山 正值乱世,OpenAI祭出镇派三部曲: 第一部·无监督吞天诀 左护法拉德福德展臂叱咤,八千亿语料化作金甲覆身。1750亿参数流转间,竟将维基百科、编程秘典、论坛野史熔于一炉。有诗证: 海纳百川自成渊, 千般任务皆等闲。 问君怎得通天道? 无监督处见真仙。 第二部·思维链诛心剑 右使布朗舞剑成幕,将"鸡兔同笼"难题斩作三段: 一斩变量立方程, 二破系数见真章, 三得解数定乾坤。 数学江湖闻风丧胆,GSM8K擂台血流成河。 第三部·人类反馈锁心牢 军师苏茨克弗布下四象大阵: 万象生成阵吐百种应答 三千标注师列善恶榜单 奖励模型炼偏好金丹 PPO算法铸道德枷锁 自此ChatGPT言出法随,虽遇"造核弹"等诛心之问,亦能恪守人伦。有词叹: 本是硅基冷面郎, 却生仁心渡慈航。 强化锁链加身日, 方知规矩胜刀枪。 第十回 三足鼎立势初成 暗流涌动藏杀机 当下江湖格局: 势力 镇派绝学 地盘 OpenAI GPT三部曲 文本生成、对话系统 谷歌 Transformer+PaLM-E 搜索翻译、多模态 新锐联盟 MoE+LoRA+FlashAttention 高效推理、平民炼丹 然暗处杀机四伏: 特斯拉世界模型派蛰伏已久,近日频现自动驾驶奇阵 DeepMind暗练AlphaTensor,数学根基摇动江湖 量子计算门徒夜观天象,称"十年内必破硅基桎梏" 忽有探马急报:"Meta祭出Llama 3大军,参数二千亿,开源直逼山门!" 欲知后事如何,且听下回《开源洪流卷四海 量子暗器破苍穹》。 (全卷终) 卷尾批注 本卷映射真实技术演进: FlashAttention v2已实现1M上下文处理 Mistral 8x7B MoE模型实测性能超Llama 2 70B LoRA微调成为行业标准 GPT-4 Turbo采纳三重防护RLHF机制 开源模型参数突破2000亿大关 江湖永不眠,且看诸君是乘势而起,或是静观其变。
  • 热度 1
    2025-2-22 21:44
    151 次阅读|
    0 个评论
    第一回 谷歌布阵出奇谋 Transformer横空定乾坤 诗曰: 滚滚代码东逝水,浪花淘尽英雄。 循环卷积转头空,参数依旧在,几度夕阳红。 白发学者芯片上,惯看秋月春风。 一壶咖啡喜相逢,AI多少事,都付笑谈中。 话说天下大势,分久必合,合久必分。自辛格顿老仙以反向传播算法一统江湖,深度学习门派分立。有循环门(RNN)仗着时序秘法盘踞文本疆域,卷积派(CNN)凭空间绝技割据图像河山。两派相争数十年,虽各有胜负,却难破"长程遗忘""梯度消散"之困局。 忽一日,谷歌祭出绝世秘籍《Attention Is All You Need》。但见那: 自注意力阵法玄妙,左手执Q键,右手握K剑,背悬V值旗幡。 千层位置编码如星斗列阵,万道多头机制似八门金锁。 任尔百步之外词句关联,皆在弹指间算得分明。 此阵一出,循环门长老LSTM吐血三升:"吾镇守序列要塞三十年,竟不知全局关联可瞬息贯通!" 卷积派掌门ResNet仰天长叹:"吾等堆叠百层卷积,不及此阵半分通透!" 自此Transformer一统江湖,史称"架构革命"。 第二回 GPT聚义起东山 语言模型夺半壁 且说OpenAI帮主山姆·阿尔特曼,观Transformer威势,暗藏雄图。密令座下三杰: 拉德福德 练得《无监督多任务心经》,集八千亿语料,铸就GPT-3金身,1750亿参数震烁寰宇 布朗 参透《思维链奥义》,以"逐步推演"之法解数学谜题,破译九章算术 苏茨克弗 布《人类反馈强化阵》,令ChatGPT口吐莲花,百万书生竞折腰 一时间,语言模型派气焰滔天。左护法BERT固守编码要塞,右先锋T5执掌翻译雄关。然其根基终在文本世界,遇物理规律便露破绽。曾有门徒问:"水从何来?" GPT答曰:"字里行间自有泉涌。" 众皆哗然。 第三回 世界模型举义旗 物理法则战虚妄 却说那法兰西老帅杨立昆,早观语言模型虚浮之弊。振臂高呼: "诸君只见文字幻象,岂不知真实世界在传感器中?当铸世界模型,直取物理本源!" 特斯拉教主马斯克应声而起,亮出FSD V12法宝。此物: 吞八百万行车影像,吐转向刹车指令 识得雨雪冰霜路况,暗合牛顿力学真章 更兼英伟达黄仁勋献上Omniverse幻境,虚实交融练兵 深度学习三巨头之杰弗里·辛顿抚掌大笑:"吾二十年前所悟反向传播,终在此刻得证大道!" 第四回 小模型暗度陈仓 效率革命惊朝野 正当巨擘鏖战千亿参数时,忽有奇兵突出: 法国隐士Mistral炼成混合专家阵(MoE),四十五亿参数舞动如龙 微软张量骑士团悟得LoRA心法,七成显存顷刻释放 斯坦福闪电门(FlashAttention)破时空桎梏,计算速度三倍飞升 语言模型派护法Hugging Face叹曰:"昔日需八卡并行,今朝一卡可驭,此乃天道轮回!" 第五回 论文如星照前路 群雄逐鹿问鼎途 且看当今武林图谱: 秘籍 创派宗师 镇山绝学 《Attention Is All You Need》 谷歌八骑士 自注意力乾坤阵 《Scaling Laws》 卡普兰 算力幂律推演术 《Chain-of-Thought》 谷歌推理堂 思维链九转还魂法 《PaLM-E》 谷歌机械阁 具身智能人机合体诀 更有后起之秀DeepMind祭出AlphaTensor,直指数学本源;MIT悟得物理推理网,单帧画像测重力。江湖风云再起,未知鹿死谁手。 尾声 这一场大模型争霸,早惊动九天玄女。但见云端显现十六字谶语: 文本幻境终有尽 物理求真路未央 效率为王谁能料 人机共生是沧桑 众豪杰闻言,或若有所思,或怅然若失。正是:莫道参数遮望眼,智能本在尘世中。欲知后事如何,且待量子计算破空来!
  • 热度 6
    2024-3-6 17:13
    866 次阅读|
    0 个评论
    By Toradex秦海 1).简介 NXP i.MX8系列处理器均为异构多核架构SoC,除了可以运行Linux等复杂操作系统的Cortax-A核心,还包含了可以运行实时操作系统比如FreeRTOS的Cortex-M核心,本文就演示通过NXP i.MX8MM处理器集成的Cortex-M4核心来运行GPT (General Purpose Timer)输入采集功能模块的测试。 I.MX8M Mini处理器GPT模块硬件比较简单,如下框图,可以实现Capture捕获输入功能和Compare定时输出功能。 本文所演示的ARM平台来自于Toradex基于NXP i.MX8M Mini ARM处理器的Verdin iMX8MM ARM嵌入式平台。 2.准备 a).Verdin i.MX8MMARM核心版配合Verdin Development Board,连接调试串口(载板X66)到开发主机方便调试,X66连接了4个串口,其中第三个是Cortex-M4核心的默认调试串口,第四个是Cortex-A53核心的默认调试串口。 b).为了测试GPT输入捕获, 相应的需要一个PWM波发生设备,这里使用Toradex基于NXP i.MX8M Plus ARM处理器的Verdin i.MX8MP核心板配合Dahlia Board作为PWM output使用。同样连接调试串口(载板X18)到开发主机方便调试。 c). Verdin i.MX8MP Cortex-A53核心系统使用Toradex Yocto Linux BSP6,更多说明请参考这里。 d).参考如下将Verdin i.MX8MP PWM1连接到Verdin i.MX8MM GPT1 Capture管脚,同时为了阻断载板其他电路干扰,将Verdin Development Board X6 Pin_24的跳线帽去掉。 Verdin Development Board X5Pin_24 SODIMM_252 3). Verdin i.MX8MM M4核心FreeRTOS基本资料 a).Verdin i.MX8MMHMP(Heterogeneous Multi-core Processing)架构基本说明请参考如下: https://developer.toradex.cn/software/cortex-m/hmp-memory-areas-on-toradex-soms/ b).参考如下说明下载配置NXP用于开发Cortex-M核心的MCUXpresso SDK https://developer.toradex.cn/software/cortex-m/setting-up-sdk-toolchain/ c).Verdin i.MX8MM编译运行M4 firmware操作流程请参考如下文章 https://developer.toradex.cn/software/real-time/freertos/freertos-on-the-cortex-m4-of-a-verdin-imx8mm d).MCUXpresso SDK包含的sample示例应用可以参考如下SDK源位置 ----------------------------- $cd /boards/evkmimx8mm/ $ tree -L 2 . ├──cmsis_driver_examples │├──ecspi │├──enet │├──i2c │└──uart ├──demo_apps │├──hello_world │└──sai_low_power_audio ├──driver_examples │├──ecspi │├──enet │├──gpio │├──gpt │├──i2c │├──pdm │├──pwm │├──rdc │├──sai │├──sdma │├──sema4 │├──tmu │├──uart │└──wdog ├──evkmimx8mm.png ├──freertos_examples │├──freertos_event │├──freertos_generic │├──freertos_hello │├──freertos_mutex │├──freertos_queue │├──freertos_sem │├──freertos_swtimer │└──freertos_tickless ├──multicore_examples │├──rpmsg_lite_pingpong_rtos │└──rpmsg_lite_str_echo_rtos └──project_template ├──board.c ├──board.h ├──BOARD_Project_Template_evkmimx8mm.cmake ├──clock_config.c ├──clock_config.h ├──peripherals.c ├──peripherals.h ├──pin_mux.c └──pin_mux.h ----------------------------- 4). Verdin i.MX8MM Cortex- M4核心FreeRTOS GPT Capture 示例驱动开发 a).Verdin i.MX8MM MCUXpresso SDK已经包含一个简单的GPT Capture sample驱动,本文基于此sample进行修改测试。 ----------------------------- $cd /boards/evkmimx8mm/driver_examples/gpt/capture $ tree -L 1 . ├──armgcc ├──board.c ├──board.h ├──clock_config.c ├──clock_config.h ├──empty_rsc_table.c ├──fsl_iomuxc.h ├──gpt_capture.c ├──gpt_capture_v3_14.xml ├──pin_mux.c ├──pin_mux.h └──readme.md ----------------------------- b).首先先确认pin_mux定义以及其他i.MX8MM初始化基本配置,如果需要可以进行修改 ./pin_mux.h/pin_mux.c用于确定项目中使用的管脚定义,本文中使用的正好就是示例默认的GPT1 Capture1管脚,因此无需修改。如果用到其他管脚,就需要进行修改,支持的所有管脚定义可以参考fsl_iomuxc.h文件。 ----------------------------- /* FUNCTION ************************************************************************************************************ * * Function Name : BOARD_InitPins * Description : Configures pin routing and optionally pin electrical features. * * END ****************************************************************************************************************/ void BOARD_InitPins(void) { /*!< Function assigned for the core: Cortex-M4 */ IOMUXC_SetPinMux(IOMUXC_SAI3_RXFS_GPT1_CAPTURE1, 0U); IOMUXC_SetPinMux(IOMUXC_UART4_RXD_UART4_RX, 0U); ... ----------------------------- ./ board.h/board.c用于i.MX8MM M4核心基本初始化配置,本文不做修改。 ./ clock_config.h/clock_config.c用于i.MX8MM M4核心基本时钟配置,本文不做修改。 c).GPT Capture功能实现 ./本文GPT Capture功能定义 GPT1 capture1管脚输入一个给定频率(如1k Hz)和占空比(如 50%) 的PWM信号,通过捕获输入上升/下降沿中断,分别获得相邻两次中断的GPT Counter计数器的计数,并以此来计算输入PWM信号的半波周期。 ./GPT Capture功能基本都是通过gpt_capture.c文件代码来实现,默认sample是捕获上升沿中断后,打印中断当时的GPT Counter计数数值。 ./为了实现本文定义的捕获功能,首先增加如下全局变量定义 ----------------------------- /******************************************************************************* * Variables ******************************************************************************/ volatile bool gptIsrFlag_Start = false; volatile bool gptIsrFlag_Finish = false; volatile uint8_t gptIsrFlag_Overflow = 0; volatile uint32_t captureVal = 0; volatile uint32_t captureVal_Last = 0; ----------------------------- // gptIsrFlag_Start定义为第一次捕获中断开始标志 // gptIsrFlag_Finish定义为第二次捕获中断结束标志 // gptIsrFlag_Overflow定义为GPT Counter溢出标志计数 // captureVal定义为第二次中断GPT Counter数值 // captureVal_Last定义为第一次中断GPT Counter数值 ./ GPT Interrupt函数修改如下: 首先处理计数器溢出情况,如果中断发生时候已经发生溢出,则增加gptIsrFlag_Overflow溢出标志计数的数值;然后通过gptIsrFlag_Start / gptIsrFlag_Finish标志位来分别处理第一次和第二次中断,获取第一次和第二次中断时候的GPT Counter数值,同时分别翻转GPT Capture Interrupt模式。 ----------------------------- void EXAMPLE_GPT_CAPTURE_IRQHandler(void) { /* GPT Counter Overflow processing */ if (GPT_GetStatusFlags(DEMO_GPT_BASE, kGPT_RollOverFlag) != false) { if (gptIsrFlag_Start == true) { gptIsrFlag_Overflow ++; } GPT_ClearStatusFlags(DEMO_GPT_BASE, kGPT_RollOverFlag); } if (GPT_GetStatusFlags(DEMO_GPT_BASE, kGPT_InputCapture1Flag) != false) { if(gptIsrFlag_Finish != true) { /* First time IRQ */ if (gptIsrFlag_Start == false) { captureVal_Last = GPT_GetInputCaptureValue(DEMO_GPT_BASE, BOARD_GPT_INPUT_CAPTURE_CHANNEL); /* Switch Interrupt mode to falling edge */ GPT_SetInputOperationMode(DEMO_GPT_BASE, BOARD_GPT_INPUT_CAPTURE_CHANNEL, kGPT_InputOperation_FallEdge); gptIsrFlag_Start = true; } /* Second time IRQ */ else { captureVal = GPT_GetInputCaptureValue(DEMO_GPT_BASE, BOARD_GPT_INPUT_CAPTURE_CHANNEL); /* Switch Interrupt mode to rising edge */ GPT_SetInputOperationMode(DEMO_GPT_BASE, BOARD_GPT_INPUT_CAPTURE_CHANNEL, kGPT_InputOperation_RiseEdge); gptIsrFlag_Start = false; gptIsrFlag_Finish = true; } } GPT_ClearStatusFlags(DEMO_GPT_BASE, BOARD_GPT_CHANNEL_FLAG); } SDK_ISR_EXIT_BARRIER; } ----------------------------- ./ Main主函数修改如下: ----------------------------- int main(void) { uint64_t int_Peroid = 0; uint32_t time_Ms = 0; uint32_t time_Us = 0; gpt_config_t gptConfig; ... GPT_GetDefaultConfig(&gptConfig); /* Initialize GPT module */ GPT_Init(DEMO_GPT_BASE, &gptConfig); ... /* Setup input capture on a gpt channel */ GPT_SetInputOperationMode(DEMO_GPT_BASE, BOARD_GPT_INPUT_CAPTURE_CHANNEL, kGPT_InputOperation_RiseEdge); ... /* Enable GPT Overflow interrupt */ GPT_EnableInterrupts(DEMO_GPT_BASE, kGPT_RollOverFlagInterruptEnable); ... while (true) { /* Check whether occur 2nd interupt */ if (true == gptIsrFlag_Finish) { /* GPT counter diff value between 2 IRQs */ int_Peroid = gptIsrFlag_Overflow * (uint64_t) 0xffffffff; int_Peroid = int_Peroid + captureVal; int_Peroid = int_Peroid - captureVal_Last; /* transfer counter value to peroid */ time_Us = (uint32_t) ((int_Peroid / 24) % 1000); time_Ms = (uint32_t) ((int_Peroid / 24) / 1000); PRINTF("\r\n interval between 2 rising edge =%u ms and %u us\r\n", time_Ms, time_Us); gptIsrFlag_Overflow = 0; gptIsrFlag_Finish = false; } else { __WFI(); } } } ----------------------------- //通过GPT_GetDefaultConfig函数获取默认的GPT Capture配置,参考docs目录下的MCUXpresso SDK API Reference Manual_MIMX8MM6.pdf文档,可以查到默认配置如下,如果需要也可以修改这个配置 ----------------------------- clockSource = kGPT_ClockSource_Periph; divider = 1U; enableRunInStop = true; enableRunInWait = true; enableRunInDoze = false; enableRunInDbg = false; enableFreeRun = false; enableMode = true; ----------------------------- //通过GPT_SetInputOperationMode函数将GPT Capture模式初始配置为上升沿触发 //为了处理GPT Counter Overflow,使能对应中断 // while函数循环执行当gptIsrFlag_Finish第二次中断采集结束标志位声明后,打印捕获的输入PWM波的半波周期。如果有溢出发生,则需要考虑增加相应的0xffffffff溢出计数次数。这里需要说明下,由于NXP iMX8MM SoC也受到如下Errata影响,因此GPT Clock Source只能使用内部24M Hz时钟源,所以这里直接使用24M来算出半波周期是多少ms和us。 https://www.nxp.com.cn/docs/en/errata/IMX8X_C0_0N99Z_ER.pdf 5).Verdin i.MX8MMCortex-M4核心FreeRTOSGPT Capture示例部署测试 a).将上述修改后的项目参考章节3的相关资料编译后,复制gpt_capture.bin可执行文件到Verdin i.MX8MM核心板Linux /home/root目录下保存。 b).对Verdin i.MX8MM模块进入U-boot命令行,通过如下命令配置Cortex-M4核心Firmware下载和运行 ----------------------------- #setenv load_cmd "ext4load mmc 0:2" #setenv m4image "/home/root/gpt_capture.bin" setenv m4image_size 17000 setenv loadm4image "${load_cmd} ${loadaddr} ${m4image}" setenv m4boot "${loadm4image}; cp.b ${loadaddr} 0x7e0000 ${m4image_size}; dcache flush; bootaux 0x7e0000" saveenv run m4boot ----------------------------- c).Verdin i.MX8MM Cortex-M4核心运行后其调试串口打印信息 ----------------------------- GPT input capture example Once the input signal is received the input capture half peroid is printed ----------------------------- d).此时在Verdin i.MX8MP平台通过如下脚本使能1kHz 50%占空比PWM输出10s时间 ----------------------------- #!/bin/sh cd /sys/class/pwm/pwmchip0/ export pwm0/period pwm0/duty_cycle pwm0/polarity pwm0/enable sleep 10 pwm0/enable ----------------------------- e).这时Verdin i.MX8MM Cortex-M4调试串口就会打印出对应的半波周期 ----------------------------- ... Input Capture Half Period Value = 0ms and 500us Input Capture Half Period Value = 0ms and 500us Input Capture Half Period Value = 0ms and 500us Input Capture Half Period Value = 0ms and 500us ... ----------------------------- f).尝试将Verdin i.MX8MP PWM修改为10kHz 80%/20%占空比 ----------------------------- ... pwm0/period pwm0/duty_cycle ... ----------------------------- g).Verdin i.MX8MM Cortex-M4输出周期会对应变化 ----------------------------- Input Capture Half Period Value = 0ms and 80us Input Capture Half Period Value = 0ms and 80us Input Capture Half Period Value = 0ms and 80us Input Capture Half Period Value = 0ms and 80us ----------------------------- h).最后,由于Verdin i.MX8MM GPT1 CAPTURE1管脚在Cortex-A53核心Linux下默认是用于WAKEUP GPIO使用,如果需要同时运行Verdin i.MX8MM Cortex-A53核心和Cortex-M4核心,就需要在Linux device-tree文件中将WAKEUP gpio-key功能替换为其他GPIO管脚资源。 https://git.toradex.cn/cgit/linux-toradex.git/tree/arch/arm64/boot/dts/freescale/imx8mm-verdin.dtsi?h=toradex_5.15-2.2.x-imx#n40 6).总结 本文简单示例了基于i.MX8MMCortex-M4核心GPT Capture功能供参考。
  • 热度 3
    2024-1-13 15:18
    215 次阅读|
    0 个评论
    OpenAI 本周正式推出了 GPT 商店,您可以在其中创建和销售自己的定制 GPT 机器人。你会创造什么?
  • 热度 2
    2023-8-8 00:21
    1630 次阅读|
    0 个评论
    《零基础学会PYTHON编程》+读书笔记
    感谢面包板社区的此次书籍试读机会!!! 我是计算机科学与技术专业毕业的,当时学习的编程语言有 C/C++/Java/C#。 当时没有开展 Python 课程,不过后面的工作中经常会用到一些脚本语言。 我最早接触的是处理文本的 Perl,正则表达式非常厉害。 后来发现 Python 也是非常常用的编程语言,用到爬虫,自动化办公。 还有现在非常火的 AI。 主要是它语法很简洁,几行代码,如果使用原生的 C/C++ 可能代码量要十几倍。 当然 Python 的执行速度就呵呵了。。。 这本书本来想要老婆写读书心得的,她现在总是参加一些 AI 相关的深圳政府培训。 有数据预处理,物联网,机器视觉,工业机器人,不过现在还没有自然语言处理相关的培训课程。 她找出了几个打印的错误,11-10 中的代码和效果图对不上。 我就说,网盘上面的代码应该是一样的,结果查看代码,和书上印的确实不一致。。。 这就尴尬了 我写了很多,网页居然没有保存功能,后面的都消失了,上传的视频也不见了,大哭。 是不是我不小心点了恢复内容。 再写一下吧: f-string 是 Python 中一种使用字面量插值的字符串格式化方法。它是从 Python 3.6 版本开始引入的。f-string 以一个小写字母 f 开头,然后是字符串,字符串中可以包含表达式,表达式会在运行时被求值并替换为其值。 例如,以下代码会打印出 "My name is Bard": Python name = "Bard" print( f"My name is {name} " ) Use code with caution. Learn more f-string 比 Python 中其他的字符串格式化方法更简洁和易读,而且速度也更快。 以下是一些 f-string 的常见用法: 插入变量值: Python name = "Bard" age = 30 print( f"My name is {name} and I am {age} years old." ) Use code with caution. Learn more 插入表达式值: Python pi = 3.14159 print( f"The value of pi is {pi} " ) Use code with caution. Learn more 格式化数字: Python number = 123456.789 print( f"The number is {number: .2 f} " ) Use code with caution. Learn more 格式化日期和时间: import datetime now = datetime.datetime.now() print(f"The current date and time is {now}")
相关资源