Flink底層原理解析:案例解析(第37天)

系列文章目錄


一、flink架構
二、Flink底層原理解析
三、Flink應用場景解析
四、fink入門案例解析

文章目錄

  • 系列文章目錄
  • 前言
  • 一、flink架構
    • 1. 作業管理器(JobManager)
    • 2. 資源管理器(ResourceManager)
    • 3. 任務管理器(TaskManager)
    • 4. 分發器(Dispatcher)
  • 二、Flink底層原理解析
    • 1. 數據流模型
      • 1.1 例1
    • 2. 任務調度與執行
      • 2.1 例2
    • 3. 內存管理
      • 3.1 例3
    • 4. 容錯機制
      • 4.1 例4
  • 三、Flink應用場景解析
    • 1. 實時數據分析
      • 1.1 例子:網絡流量監控
    • 2. 社交媒體分析
      • 2.1 例子:實時用戶行為分析
    • 3. 交易監控
      • 3.1 例子:金融交易實時監控
    • 4. 日志處理
      • 4.1 例子:大規模日志實時處理
    • 5. 物聯網(IoT)
      • 5.1 例子:設備數據實時收集和處理
  • 四、fink入門案例解析
    • 1. 滾動窗口(tumble window)
      • 1.1 處理時間演示
      • 1.2 事件時間演示
      • 1.3 窗口的時間計算
    • 2. 滑動窗口(hop)
      • 2.1阿里云: SQL-入門案例
    • 3. 會話窗口(session)
      • 3.1 SQL案例實現
    • 4. 聚合窗口(over)
      • 4.1. 根據時間聚合代碼實現
      • 4.2. 根據行號聚合代碼實現


前言

Apache Flink 是一個開源的流處理框架,用于處理無界和有界數據流。其底層原理復雜而精細,涉及到數據流模型、任務調度與執行、內存管理、容錯機制等多個方面。本文是對 Flink 底層原理的詳細分析,并嘗試通過舉例來說明這些原理。


提示:以下是本篇文章正文內容,下面案例可供參考

一、flink架構

在這里插入圖片描述
在這里插入圖片描述

Flink是一個用于有狀態并行數據流處理的分布式計算引擎,其運行時架構主要包括四個核心組件:作業管理器(JobManager)、資源管理器(ResourceManager)、任務管理器(TaskManager)以及分發器(Dispatcher)。以下是這些組件的詳細功能介紹:

1. 作業管理器(JobManager)

  • 功能:作業管理器是單個應用程序的主線程,每個應用程序都有一個單獨的JobManager進行控制。它負責接收并執行應用程序,這些應用程序通常包含作業圖(JobGraph)、邏輯數據流圖(logical dataflow graph)以及一個打包了所有類、庫和其他資源的JAR包。
  • 作用:JobManager會將JobGraph轉換成物理層面的數據流圖,即執行圖(Execution Graph),這個圖包含了所有可以并發執行的任務。JobManager還會向ResourceManager請求執行任務所需的資源(即TaskManager中的插槽),一旦獲取到足夠的資源,就會將執行圖分發到TaskManager上執行。同時,JobManager還負責所有需要中央協調的操作,如檢查點(checkpoint)的協調。

2. 資源管理器(ResourceManager)

  • 功能:資源管理器負責管理TaskManager的插槽(slot),slot是Flink中定義的處理資源的最小單元。Flink為不同的環境和資源管理工具提供了不同的資源管理器,如YARN、Mesos、Kubernetes以及standalone部署。
  • 作用:當JobManager申請slot資源時,ResourceManager會將有空閑的TaskManager分配給JobManager。如果ResourceManager沒有足夠的slot來滿足JobManager的請求,它還可以向資源提供平臺發起會話,以提供啟動TaskManager進程的容器。

3. 任務管理器(TaskManager)

  • 功能:任務管理器是Flink的工作進程,負責執行JobManager分配的任務。Flink集群中通常會運行多個TaskManager進程,每個TaskManager都包含一定數量的插槽(slots),插槽的數量限制了TaskManager能夠執行的任務數量。
  • 作用:TaskManager啟動后會向ResourceManager注冊它的插槽,并在收到ResourceManager的指令后,向JobManager提供一個或多個插槽資源。JobManager隨后會將任務分配到這些插槽中執行。在運行過程中,同一個應用程序中不同的TaskManager進程可以進行數據交換。

4. 分發器(Dispatcher)

  • 功能:分發器可以跨作業運行,并為應用程序提供了REST接口。它的主要作用是在應用被提交執行時,分發并將應用移交給一個JobManager。
  • 作用:Dispatcher還會啟動一個Web UI,用于方便地展示和監控作業的執行。然而,Dispatcher在架構中可能并不是必須的,這取決于應用提交運行的方式。
    綜上所述,Flink的四大組件在運行時協同工作,共同管理流應用程序的執行。每個組件都承擔著特定的功能和作用,確保了Flink能夠高效地處理數據流。

二、Flink底層原理解析

Apache Flink 是一個開源的流處理框架,用于處理無界和有界數據流。其底層原理復雜而精細,涉及到數據流模型、任務調度與執行、內存管理、容錯機制等多個方面。以下是對 Flink 底層原理的詳細分析,并嘗試通過舉例來說明這些原理。

1. 數據流模型

核心概念:

  • 事件時間(Event Time):基于事件本身的時間戳進行處理,適用于有時間順序的數據流。這意味著即使數據因為網絡延遲等原因到達系統的時間不一致,Flink 也會根據事件的時間戳來重新排序并處理數據。
  • 處理時間(Processing Time):基于數據處理開始或結束的時間進行處理,適用于無明確時間順序的數據流。這種處理方式較為簡單,但可能無法準確反映數據的實際順序。
  • 窗口(Window):將連續事件劃分為時間片或數據片進行聚合分析。窗口是 Flink 中處理數據流的關鍵機制之一,它允許開發者定義時間窗口(如滾動窗口、滑動窗口等)來對數據進行聚合操作。

1.1 例1

假設我們有一個實時交易系統,需要統計每分鐘的交易數量。在這個場景下,我們可以使用 Flink 的事件時間窗口來處理數據流。每個交易事件都會攜帶一個時間戳(即事件發生的時間),Flink 會根據這個時間戳將交易事件分配到對應的時間窗口中,并進行聚合計算。這樣,即使交易事件因為網絡延遲等原因沒有立即到達系統,Flink 也能保證最終統計結果的準確性。

2. 任務調度與執行

核心概念:

  • 任務調度器:Flink 使用基于時間的調度器來調度和執行任務。調度器會根據任務的依賴關系和資源可用性來動態地分配任務到不同的 TaskManager 上執行。
  • 并行執行:Flink 支持多任務并行執行,以提高處理速度和吞吐量。在 Flink 中,一個作業(Job)會被拆分成多個任務(Task),每個任務可以在不同的 TaskManager 上并行執行。

2.1 例2

繼續以實時交易系統為例。假設我們的系統需要處理大量的交易數據,并且希望盡快得到統計結果。在 Flink 中,我們可以將交易數據處理作業拆分成多個任務,并分配給多個 TaskManager 并行執行。每個 TaskManager 都會處理一部分交易數據,并生成相應的統計結果。最后,這些統計結果會被匯總起來,形成最終的統計報告。

3. 內存管理

核心概念:

  • 分層內存管理系統:Flink 采用了分層內存管理系統來確保各個層次的內存使用合理。這包括堆內存(Heap Memory)和堆外內存(Off-heap Memory)等不同的內存區域。
  • 垃圾回收:Flink 會進行定期的垃圾回收操作,以釋放不再使用的內存資源。這有助于防止內存泄漏問題,并提高系統的穩定性和性能。

3.1 例3

在實時交易系統中,由于交易數據是持續不斷地產生的,因此 Flink 需要高效地管理內存資源以避免內存溢出等問題。Flink 的分層內存管理系統允許開發者根據數據的特性和處理需求來合理地分配內存資源。例如,對于需要頻繁訪問的數據(如熱點數據),可以將其存儲在堆內存中以便快速訪問;而對于不需要頻繁訪問的數據(如歷史數據),則可以將其存儲在堆外內存中以節省堆內存資源。

4. 容錯機制

核心概念:

  • 檢查點(Checkpoint):Flink 通過周期性地保存作業的狀態到持久化存儲中來實現容錯。當系統發生故障時,Flink 可以從最近的檢查點恢復作業的狀態并繼續執行。
  • 日志復制:Flink 還采用了基于日志復制的方法來確保任務在處理期間不會丟失數據。這有助于提高系統的可靠性和容錯性。

4.1 例4

在實時交易系統中,如果某個 TaskManager 發生故障導致任務失敗,那么 Flink 會利用檢查點機制來恢復該任務的狀態并繼續執行。具體來說,Flink 會從最近的檢查點中讀取任務的狀態信息,并將這些信息重新加載到新的 TaskManager 上。然后,新的 TaskManager 會從檢查點之后的位置開始繼續處理數據流。這樣,即使發生了故障,Flink 也能保證數據的完整性和一致性。

總結
Apache Flink 的底層原理涉及多個方面,包括數據流模型、任務調度與執行、內存管理、容錯機制等。這些原理共同構成了 Flink 強大的實時流處理能力。通過舉例分析,我們可以看到 Flink 是如何在實際應用中處理數據流、調度任務、管理內存和保障容錯的。這些特性使得 Flink 成為處理大規模實時數據流的理想選擇。

三、Flink應用場景解析

Apache Flink 作為一個開源流處理框架,在實時數據處理領域有廣泛的應用。以下是一些實際例子來說明 Flink 的應用場景和優勢:

1. 實時數據分析

1.1 例子:網絡流量監控

  • 場景描述:在大型互聯網公司中,網絡流量是評估服務性能和用戶行為的重要指標。使用 Flink 可以實時地監控和分析網絡流量數據,如每秒的請求數、響應時間等。
  • 實現方式:通過 Flink 的 DataStream API,可以實時地從數據源(如 Kafka)讀取流量數據,并進行聚合、過濾等處理,然后將結果輸出到實時分析平臺或數據庫中。
    *優勢:Flink 的高吞吐量和低延遲特性使得它能夠快速響應數據變化,為決策者提供實時、準確的數據支持。

2. 社交媒體分析

2.1 例子:實時用戶行為分析

  • 場景描述:社交媒體平臺需要實時分析用戶的行為數據,如點贊、評論、分享等,以了解用戶偏好和趨勢,從而優化內容推薦和廣告投放策略。
  • 實現方式:利用 Flink 的事件時間窗口和狀態管理功能,可以實時地處理用戶行為數據流,計算用戶的活躍度、興趣偏好等指標,并實時更新用戶畫像。
  • 優勢:Flink 的高可靠性和容錯性保證了數據處理的一致性和連續性,即使在系統發生故障時也能快速恢復,保證數據的實時性和準確性。

3. 交易監控

3.1 例子:金融交易實時監控

  • 場景描述:在金融領域,交易監控是保障交易安全、預防欺詐的重要手段。通過 Flink 可以實時監控交易數據流,識別異常交易行為。
  • 實現方式:使用 Flink 的復雜事件處理(CEP)功能,可以定義復雜的交易模式并實時地匹配交易數據流,一旦發現異常交易行為則立即觸發警報。
  • 優勢:Flink 的高并發處理能力和低延遲特性使得它能夠處理大量的交易數據,并實時地識別出異常交易行為,從而保障交易安全。

4. 日志處理

4.1 例子:大規模日志實時處理

  • 場景描述:在大型分布式系統中,日志文件是排查問題、優化性能的重要依據。使用 Flink 可以實時地處理和分析大規模日志數據。
  • 實現方式:通過 Flink 的 DataStream API,可以實時地從日志收集系統(如 Flume、Logstash)讀取日志數據,并進行過濾、聚合等處理,然后將結果輸出到日志分析平臺或數據庫中。
  • 優勢:Flink 的高吞吐量和可擴展性使得它能夠處理海量的日志數據,并實時地提供分析結果,幫助運維人員快速定位問題并優化系統性能。

5. 物聯網(IoT)

5.1 例子:設備數據實時收集和處理

  • 場景描述:在物聯網場景中,大量設備產生的數據需要被實時收集和處理,以支持智能決策和遠程控制。
  • 實現方式:使用 Flink 可以實時地從設備數據源(如 MQTT 消息隊列)讀取數據,并進行數據清洗、聚合等處理,然后將處理結果發送到云端或本地系統進行進一步分析。
  • 優勢:Flink 的實時性和可靠性使得它能夠快速響應設備數據變化,并保證數據處理的一致性和連續性,為物聯網應用提供強大的數據支持。
    這些例子展示了 Flink 在不同領域的實際應用和優勢,體現了其在實時數據處理領域的強大能力。

四、fink入門案例解析

1. 滾動窗口(tumble window)

在這里插入圖片描述
在這里插入圖片描述

滾動窗口:窗口大小固定不變,同時窗口的移動距離和窗口大小相等

  1. 特點:
  • 窗口大小固定不變
  • 窗口的移動距離和窗口大小相等
  • 相鄰的兩個窗口間,既沒有重疊也沒有空缺,也就是數據僅且只會被處理一次
  1. 語法
    格式: tumble(時間字段名稱, 滾動窗口大小)
    示例: tumble(pt, interval ‘10’ second),創建了一個窗口大小是10秒的滾動窗口

1.1 處理時間演示

**如下操作全部都在node1上面執行:**
#1.建表
CREATE TEMPORARY TABLE source_table_tumble0 ( user_id BIGINT, price BIGINT,`timestamp` STRING,pt AS PROCTIME()
) WITH ('connector' = 'socket','hostname' = '192.168.88.161',        'port' = '9999','format' = 'csv'
);#2.啟動nc
nc -lk 9999#3.SQL邏輯
select user_id,count(user_id) as pv,sum(price) as sum_price
from source_table_tumble0
group by
user_id,tumble(pt, interval '10' second);

在這里插入圖片描述
在這里插入圖片描述

1.2 事件時間演示

#1.創建source表
CREATE TEMPORARY TABLE source_table_tumble1 ( user_id STRING, price BIGINT,`timestamp` bigint,row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),watermark for row_time as row_time - interval '0' second
) WITH ('connector' = 'socket','hostname' = '192.168.88.161',        'port' = '9999','format' = 'csv'
);#2.啟動nc
nc -lk 9999#3.執行查詢語句
select 
user_id,
count(user_id) as pv,sum(price) as sum_price,
UNIX_TIMESTAMP(CAST(tumble_start(row_time, interval '5' second) AS STRING)) * 1000  as window_start,
UNIX_TIMESTAMP(CAST(tumble_end(row_time, interval '5' second) AS STRING)) * 1000  as window_end
from source_table_tumble1
group byuser_id,tumble(row_time, interval '5' second);解釋: window_start、window_end用來幫助查看窗口的開始和結束時間的,字段數據的表達式是固定寫法,單位是毫秒。

在這里插入圖片描述

1.3 窗口的時間計算

一、窗口的開始時間窗口的開始時間,與第一條數據的時間相關計算公式 = 第一條數據的時間 - (第一條數據的時間 % 窗口大小)二、窗口的結束時間窗口的結束時間,與窗口的開始時間和窗口大小有關計算公式= 窗口的開始時間 + 窗口大小 - 1毫秒三、窗口計算的觸發時間點觸發時間,也就是窗口內部的數據被進行計算的時間點。窗口什么時候結束,那么就什么時候觸發窗口內數據的計算操作四、以案例給大家進行演示第一個窗口:窗口的開始時間 = 1000 - (1000 % 5000) = 1000 - 1000 = 0窗口的結束時間 = 0 + 5000 - 1 = 4999窗口的時間范圍 = [0, 4999] = [0, 5000)窗口的觸發時間 = 5000第二個窗口:窗口的開始時間 = 5000 - (5000 % 5000) = 5000 - 0 = 5000窗口的結束時間 = 5000 + 5000 - 1 = 9999窗口的時間范圍 = [5000, 9999] = [5000, 10000)窗口的觸發時間 = 10000

2. 滑動窗口(hop)

在這里插入圖片描述
在這里插入圖片描述

滑動窗口的分類
場景1: 相鄰的滑動窗口間有重疊的部分,有部分數據被重復計算的情況。滑動窗口的主要使用場景
場景2: 相鄰的滑動窗口間既沒有重疊,也沒有空隙。這種就是滾動窗口
場景3: 相鄰的滑動窗口間有空隙,這種情況會導致部分數據得不到計算,也就是有數據丟失情況。實際工作中不允許出現。

2.1阿里云: SQL-入門案例

--0.語法
格式: hop(事件時間字段名稱, 滑動距離, 窗口大小)
示例: hop(row_time, interval '2' SECOND, interval '5' SECOND)
滑動距離: 可以理解為多久對窗口內的數據執行一次計算--1.創建表
CREATE TEMPORARY TABLE source_table_hop1 ( user_id STRING, price BIGINT,`timestamp` bigint,row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),watermark for row_time as row_time - interval '0' second
) WITH ('connector' = 'socket','hostname' = '172.24.24.49',        'port' = '9999','format' = 'csv'
);--2.查詢的SQL
SELECT user_id,
UNIX_TIMESTAMP(CAST(hop_start(row_time, interval '2' SECOND, interval '5' SECOND) AS STRING)) * 1000 as window_start,
UNIX_TIMESTAMP(CAST(hop_end(row_time, interval '2' SECOND, interval '5' SECOND) AS STRING)) * 1000 as window_end, sum(price) as sum_price
FROM source_table_hop1
GROUP BY user_id, hop(row_time, interval '2' SECOND, interval '5' SECOND);注意: hostname要改成自己的阿里云ECS服務器的內網IP--3.在你自己的阿里云ECS服務器上啟動nc
nc -lk 9999

在這里插入圖片描述

3. 會話窗口(session)

在這里插入圖片描述

3.1 SQL案例實現

--0.語法--1.創建表
CREATE TEMPORARY TABLE source_table_session ( user_id STRING, price BIGINT,`timestamp` bigint,row_time AS TO_TIMESTAMP(FROM_UNIXTIME(`timestamp`)),watermark for row_time as row_time - interval '0' second
) WITH ('connector' = 'socket','hostname' = 'node1',        'port' = '9999','format' = 'csv'
);---2.執行SQL
SELECT user_id,
UNIX_TIMESTAMP(CAST(session_start(row_time, interval '5' SECOND) AS STRING)) * 1000 as window_start,
UNIX_TIMESTAMP(CAST(session_end(row_time, interval '5' SECOND) AS STRING)) * 1000 as window_end, sum(price) as sum_price
FROM source_table_session
GROUP BY user_id, session(row_time, interval '5' SECOND);

4. 聚合窗口(over)

4.1. 根據時間聚合代碼實現

--1.創建表
CREATE TEMPORARY TABLE source_table_over_time (order_id BIGINT,product BIGINT,amount BIGINT,order_time as cast(CURRENT_TIMESTAMP as TIMESTAMP(3)),WATERMARK FOR order_time AS order_time - INTERVAL '0' SECOND
) WITH ('connector' = 'datagen','rows-per-second' = '1','fields.order_id.min' = '1','fields.order_id.max' = '2','fields.amount.min' = '1','fields.amount.max' = '10','fields.product.min' = '1','fields.product.max' = '2'
);--2.執行SQL
SELECT product, order_time, amount,SUM(amount) OVER (PARTITION BY productORDER BY order_time-- 標識統計范圍是一個 product 的最近1小時內的數據RANGE BETWEEN INTERVAL '5' SECOND PRECEDING AND CURRENT ROW) AS one_hour_prod_amount_sum
FROM source_table_over_time;--3.和Hive中的over函數寫法類似,只是在over里面多了時間的條件

4.2. 根據行號聚合代碼實現

--1.創建表
CREATE TEMPORARY TABLE source_table_over_rows (order_id BIGINT,product BIGINT,amount BIGINT,order_time as cast(CURRENT_TIMESTAMP as TIMESTAMP(3)),WATERMARK FOR order_time AS order_time - INTERVAL '0' SECOND
) WITH ('connector' = 'datagen','rows-per-second' = '1','fields.order_id.min' = '1','fields.order_id.max' = '2','fields.amount.min' = '1','fields.amount.max' = '2','fields.product.min' = '1','fields.product.max' = '2'
);--2.執行SQL
SELECT product, order_time, amount,SUM(amount) OVER (PARTITION BY productORDER BY order_time-- 標識統計范圍是一個 product 的最近 5 行數據ROWS BETWEEN 5 PRECEDING AND CURRENT ROW) AS one_hour_prod_amount_sum
FROM source_table_over_rows;--2.根據行號聚合,和上面的根據時間聚合類似,也和Hive中的over函數類似。只是添加了行號的條件

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/46047.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46047.shtml
英文地址,請注明出處:http://en.pswp.cn/web/46047.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Laravel的魔法面具:深入解析門面(Facades)的神秘力量

Laravel的魔法面具:深入解析門面(Facades)的神秘力量 在Laravel的世界中,門面(Facades)是一種將類靜態方法調用轉換為動態方法調用的機制。它們提供了一種優雅的方式來與底層的Laravel服務容器進行交互&am…

Baum-Welch算法,也被稱為前向-后向算法,是一種用于訓練隱馬爾可夫模型(Hidden Markov Model, HMM)的重要算法。

Baum-Welch算法詳解與Python代碼示例 一、算法詳解 Baum-Welch算法,也被稱為前向-后向算法,是一種用于訓練隱馬爾可夫模型(Hidden Markov Model, HMM)的重要算法。HMM是一種統計模型,用于描述一個含有隱含未知參數的…

Java中創建對象的幾種方式

Java中創建對象的幾種方式 1. 使用new關鍵字 這是最直接、最常見的創建對象的方式。通過new關鍵字,Java會調用類的構造函數(Constructor)來初始化新創建的對象。 ClassName obj new ClassName();2. 使用clone()方法 如果類實現了Cloneab…

JavaScript統計字符串中出現次數最多的字符

思路&#xff1a;使用charAt()方法可以通過for循環來依次遍歷出字符串中的字符 將遍歷出來的字符作為一個空對象的屬性 如果該對象中該屬性沒有值則對其賦值為1 如果該對象中已經有值了則在原基礎上加1 最后通過for in循環比較對象中個屬性值大大小然后將其打印出來 <!DOCT…

liunx面試題目

如何看當前Linux系統有幾顆物理CPU和每顆CPU的核數&#xff1f; 查看物理cup&#xff1a; cat /proc/cpuinfo|grep -c ‘physical id’ 查看每顆cup核數 cat /proc/cpuinfo|grep -c ‘processor’ 若希望自動實現軟件包的更新&#xff0c;可以使用yum-cron并啟動該服務 yum -y …

網絡請求之urllib.request的使用(Get方式)

urllib.request用于打開和讀取url&#xff0c;模擬瀏覽器發送一個http請求&#xff0c;并獲取響應結果。 urllib.request.urlopen的語法格式&#xff1a; urlopen(url,dataNone,[timeout,]*,cafileNone,capathNone,cadefaultFalse,contextNone) 參數說明&#xff1a; url url…

C++ std::lock_guard和 std::unique_lock

二者都是 C 標準庫中用于管理互斥鎖&#xff08;mutex&#xff09;的 RAII&#xff08;Resource Acquisition Is Initialization&#xff09;機制的類。這些類可以確保互斥鎖在構造時被獲取&#xff0c;在析構時被釋放&#xff0c;從而避免死鎖和資源泄漏問題。不過&#xff0c…

Python基礎語法篇(上)

Python基礎語法&#xff08;上&#xff09; 一、基知二、基本數據類型&#xff08;一&#xff09;標準數據類型&#xff08;二&#xff09;數據類型轉換 三、字符串基本操作&#xff08;一&#xff09;字符串的索引和切片&#xff08;二&#xff09;字符串的拼接 三、運算符四、…

web安全之跨站腳本攻擊xss

定義: 后果 比如黑客可以通過惡意代碼,拿到用戶的cookie就可以去登陸了 分類 存儲型 攻擊者把惡意腳本存儲在目標網站的數據庫中(沒有過濾直接保存)&#xff0c;當用戶訪問這個頁面時&#xff0c;惡意腳本會從數據庫中被讀取并在用戶瀏覽器中執行。比如在那些允許用戶評論的…

【Karapathy大神build-nanogpt】Take Away Notes

B站翻譯LINK Personal Note Andrej rebuild gpt2 in pytorch. Take Away Points Before entereing serious training, he use Shakespear’s work as a small debugging datset to see if a model can overfit. Overfitging is a should thing.If we use TF32 or BF32, (by…

Ansys Zemax|探索OS中的物理光學傳播

概述 物理光學傳播 (Physical Optics Propagation, POP) 分析是OpticStudio序列模式中的一個強大的分析工具&#xff0c;它可以用來分析光束的傳播和光纖耦合的效率。這篇文章旨在介紹這一分析工具的功能&#xff0c;并向您展示一些具體的應用示例。本文同時為您介紹了如何使用…

有關電力電子技術的一些相關仿真和分析:⑦三相橋式電壓型PWM逆變器與直接/間接法控制單相全橋結構PWM整流器(MATLAB/Siumlink仿真)

1.1 題目一要求 以三相橋式電壓型PWM逆變器為對象,研究其在不同調制度下,輸出電壓的頻譜成分變化,依據仿真波形分析其工作時序。 參數要求:三相橋式逆變電路,直流側電壓800V,調制波頻率50HZ,開關頻率10kHZ,阻感負載R=10Ω,L=5mH。 1.2 題目二要求 以單相全橋結構P…

高效接入電商訂單API,掌握這些技巧輕松實現

受全渠道大趨勢的影響&#xff0c;很多實體商家紛紛開展電商業務&#xff0c;為了提升業務管理效率&#xff0c;想要在原有管理系統的基礎上通過接入電商訂單API接口&#xff0c;方便將線上線下的訂單進行統一管理&#xff0c;但各個電商平臺的電商訂單API接口那么多&#xff0…

allure_pytest:AttributeError: ‘str‘ object has no attribute ‘iter_parents‘

踩坑記錄 問題描述&#xff1a; 接口自動化測試時出現報錯&#xff0c;報錯文件是allure_pytest庫 問題分析&#xff1a; 自動化測試框架是比較成熟的代碼&#xff0c;報錯也不是自己寫的文件&#xff0c;而是第三方庫&#xff0c;首先推測是allure_pytest和某些庫有版本不兼…

彩電上自帶的推箱子游戲是什么編程語言開發的?

2000年左右的廈新彩電上&#xff0c;自帶了推箱子、華容道游戲。界面如下&#xff1a; 在線版推箱子游戲&#xff0c;網址&#xff1a;https://www.tuixiangzi.cn/ BASIC&#xff0c;全稱是Beginners All-purpose Symbolic Instruction Code&#xff0c;含義是初學者通用符號…

Ubuntu 添加gcc頭文件搜索路徑

對個人用戶生效 sudo vim ~/.bashrc在該文件末尾添加 #gcc C_INCLUDE_PATH$C_INCLUDE_PATH:your_path export C_INCLUDE_PATH #g CPLUS_INCLUDE_PATH$CPLUS_INCLUDE_PATH:your_path export CPLUS_INCLUDE_PATH最后&#xff0c;重啟終端即可生效 可用以下命令查看搜索路徑 ec…

深入了解Memcached:緩存技術的利器

文章目錄 深入了解Memcached&#xff1a;緩存技術的利器一、Memcached簡介什么是Memcached&#xff1f;Memcached的特點 二、Memcached的工作原理緩存機制分布式緩存 三、Memcached的架構客戶端與服務器數據存儲 四、Memcached的安裝與配置安裝Memcached在Linux上安裝在macOS上…

【IEEE出版順利申請中】2024年第四屆電子信息工程與計算機科學國際會議(EIECS 2024)

2024年第四屆電子信息工程與計算機科學國際會議(EIECS 2024) 2024 4th International Conference on Electronic Information Engineering and Computer Science 中國延吉 | 2024年9月27-29日 電子信息的出現與計算機技術、通信技術和高密度存儲技術的迅速發展并在各個領域里…

每日練習,不要放棄

目錄 題目1.下面敘述錯誤的是 ( )2.java如何返回request范圍內存在的對象&#xff1f;3.以下代碼將打印出4.下列類定義中哪些是合法的抽象類的定義&#xff1f;&#xff08;&#xff09;5.以下代碼段執行后的輸出結果為6.以下代碼運行輸出的是總結 題目 選自牛客網 1.下面敘述…

深度學習驅動智能超材料設計與應用

在深度學習與超材料融合的背景下&#xff0c;不僅提高了設計的效率和質量&#xff0c;還為實現定制化和精準化的治療提供了可能&#xff0c;展現了在材料科學領域的巨大潛力。深度學習可以幫助實現超材料結構參數的優化、電磁響應的預測、拓撲結構的自動設計、相位的預測及結構…