伯克利開源工具庫RLib現已支持大規模多智能體強化學習

AI前線導讀:近日,UC伯克利的研究團隊RISELab在其Github的項目Ray Rlib 0.6.0中添加了面向多智能體強化學習(multi-agent Reinforcement Learning)的支持。本文由團隊成員Eric Liang首發于RISELab團隊主頁,AI前線翻譯整理。本文主要是關于多智能體強化學習的簡明教程,以及在RLib中的設計思路。

為什么要使用多智能體強化學習?

研究人員發現,在實際的強化學習設置中,很多問題都討論到使用多智能體學習是否有意義。在特定的環境中,與訓練單一策略的方案相比,多智能體方案能提供以下優點:

  • 對問題的分解更具有可解釋性。舉個例子,假設現在需要在城市環境中訓練蜂窩天線仰角控制的策略。一種方案是訓練一個“超級智能體”在城市中控制所有的蜂窩天線,另一種方案是將每個天線建模成分離的智能體,后者顯然更加合理。因為只有相鄰的天線和用戶觀測到的天線需要彼此互聯,而其他個體之間則不需要復雜的響應機制。
  • 對于可擴展性的潛力:首先,將一個龐大的、復雜的單一智能體分解為多個簡單的智能體不僅可以減少輸入和輸出的維度,同時也可以有效的增加每次迭代過程中訓練數據的輸入數量。其次,對每個智能體的操作和觀測空間進行分區,可以起到與時域抽象方法類似的作用,該方法成功地在單智能體策略中提高了學習效率。相對地,類似的分級方法可以顯式地實現為多智能體系統。最后,好的分解策略可以對環境變化具有更好的魯棒性,例如,單一的超智能體很容易對某個特定環境產生過擬合。

\"image\"

圖 1:單智能體方法(a)和(b)與多智能體強化學習(c)。

一些多智能體應用的例子:

減少交通擁堵:事實證明,智能化控制少數自動駕駛車輛的速度,我們可以大幅增加交通流量。多智能體是這種自動化策略的基礎,因為在混合自動化系統中,將交通信號燈和車輛建模為單個智能體是不現實的,因為這需要在一個廣泛區域內的所有智能體之間同步所有的觀測值和行為。

\"image\"

圖 2:交通流量模擬,上圖為沒有自動駕駛車輛的情況,下圖為有自動駕駛車輛的情況。

天線仰角控制:可以根據本地環境的用戶分布和拓撲結構來優化蜂窩基站的聯合配置。每個基站可以被建模為覆蓋城市的多個智能體之一。

\"image\"

圖 3:天線仰角控制系統

OpenAI Five:Dota 2 AI智能體經過訓練,可以相互協調并與人類對抗。五個AI玩家中的每一個都作為單獨的神經網絡策略實施,并與大規模PPO一起訓練。

\"image\"

圖 4:電腦玩家進行Dota 2游戲

介紹RLib中的多智能體支持

本文主要針對RLib中的通用多智能體支持進行介紹,包括與Rlib中的大多數分布式算法(A2C/A3C、PPO、IMPALA、DQN、DDPG和Ape-X)的兼容性介紹。本文還討論了多智能體強化學習面臨的挑戰,并展示了如何使用現有算法訓練多智能體策略,同時還提供了針對非平穩環境和環境變化較多情況下的特定算法的實現。

由于當前可供使用的多智能體強化學習庫幾乎沒有,這就增加了基于多智能體方法的實驗成本。在科研和應用兩個領域中,RLib希望減少從單智能體模式轉為多智能體模式的矛盾并簡化轉變過程。

為什么支持多智能體很困難

為類似強化學習這種快速發展的領域開發軟件是極具挑戰性的,多智能體強化學習更甚之。這一工作的難點主要是針對處理多智能體學習中出現的核心問題的技術。

舉個例子:非平穩環境。在下圖中,紅色智能體的目標是學習如何調節整個交通流的速度。藍色智能體則只學習如何最小化它自己的行進時間。紅色智能體可以通過簡單地以所需速度駕駛來實現其目標。然而,在多智能體環境中,其他智能體將會學習如何達到其目標——例如藍色智能體通過繞行以縮短其時間。這是有問題的,因為從單智能體的視角來看(例如圖中紅色智能體),藍色智能體也是“環境的一部分”。事實上,從單智能體視角來看,環境的動態變化違反了馬爾可夫假設,而在Q-learning算法例如DQN中,這是整個算法設計的前提。

\"image\"

圖 5:環境中的非平穩過程:最開始在(a)中,紅色智能體通過減速來控制整個交通流的速度。然而,緊接著藍色智能體會學習繞過紅色智能體(b),這時,紅色智能體的處理機制將無法有效的應對當前環境。

針對上述情況,很多算法被提出,例如LOLA、RIAL和Q-MIX。 從高層面講,強化學習模型的訓練過程中,這些算法會考慮其他智能體的行為。通常是在訓練階段部分集中化,在執行階段分散化處理。在實現方面,這意味著策略網絡之間是彼此依賴的,例如,Q-MIX算法中的網絡混合:

\"image\"

圖 6:Q-MIX混合網絡結構,具體可參考:QMIX: Monotonic Value Function Factorisation for Deep Multi-Agent Reinforcement Learning。獨立的Q-估測通過單調的混合網絡進行累積,從而高效地進行最終行為的計算。

類似地,基于梯度策略的算法例如A3C和PPO等,可能無法兼容多智能體配置。因為隨著智能體數量的增加,置信度評價將變得越來越困難。考慮下圖中這種多智能體的所處的情況。可以看出,隨著智能體數量的增加,對智能體的激勵與其行為的相關性將會越來越小。此時,交通速度已經降為了0,但是智能體并不能作出正確的響應以打破僵局。

\"image\"

圖 7:復雜情況下的優勢估測:在上圖的交通阻塞情況中,難以判斷哪個智能體是主要原因,在阻塞情況被解決后,同樣無法確定應當給哪個智能體分配更高的置信度。

一類方法通過中心化值函數(如圖8中的“Q”框)來模擬其他智能體對環境中的影響,MA-DDPG則使用了這種方法。直觀地講,通過統計其他智能體的行為,可以有效減少對每個智能體進行優勢估計時的變化性。

\"image\"

圖 8:MA-DDPG基本框架,選自Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments。在執行階段,僅使用局部信息,但在訓練階段需要使用全局信息進行優化。

到這里,本文已經介紹了研究多智能體強化學習所面臨的兩大挑戰與解決策略。在很多情況下,使用單智能體強化學習算法訓練多智能策略可以取得不錯的結果。例如,OpenAI Five就是利用了大規模PPO和特殊化網絡模型的組合。

在RLib中訓練多智能體

那么,在多智能體設置中如何使用特殊化算法與單智能體強化學習?RLib為此設計了簡單易行的方法。相關細則如下:

  • 策略被表示為對象:在RLib中,所有的基于梯度的算法都會聲明一個策略圖對象,該對象包含一個策略模型πθ(ot)和一個軌跡后處理函數postθ(traj)以及策略損失L(θ; X)。該策略圖對象為分布式框架提供了足夠的內容與功能以執行環境部署(通過檢索πθ)、經驗整理(通過應用postθ)以及策略優化(通過減小策略損失)。

  • 策略對象是黑箱:為了支持多智能體配置,在每個環境中,RLib僅管理多個策略圖的創建與執行,并在策略優化過程中對他們的損失進行累計。在RLib中,策略圖對象通常被當成黑箱,這就意味著可以用任何框架(包括TensorFlow和PyTorch)來實現它們。此外,策略圖可以在內部共享變量和層以實現Q-MIX和MA-DDPG等算法,而不需要特殊的框架支持。

更了更具體的說明這些細則,接下來的幾節將介紹一些RLlib中的多智能體API來執行大規模多智能體訓練的代碼示例。

多智能體環境模型

由于不確定標準的多智能體環境借口,因此RISELab將這個多智能體環境模型編寫為Gym接口的直接擴展。在多智能體環境中,每一步會存在多種行為實體。圖6所示的是一種交通控制場景,其中多個可控實體(例如,交通燈、自動駕駛車輛)一起工作以減少高速公路擁堵。

在該場景中:

  • 每個智能體都可以在不同的時間尺度上作出響應(即,異步工作)。
  • 智能體會隨時間進出該環境。

\"image\"

圖 9:RLib多智能體環境可以模擬多個獨立智能體隨時間進出環境的情況。不同的智能體可以被賦予不同的策略。

下面這段代碼是使用MultiAgentEnv接口的一個示例,該接口可以從多個就緒的智能體中返回觀測值和激勵:

# 示例:使用多智能體環境\u0026gt; env = MultiAgentTrafficEnv(num_cars=20, num_traffic_lights=5)# 觀測值是字典形式的,不是每一個智能體都需要在每個時間點被表示于字典中。\u0026gt; print(env.reset()){? ?\u0026quot;car_1\u0026quot;: [[...]],? ?\u0026quot;car_2\u0026quot;: [[...]],? ?\u0026quot;traffic_light_1\u0026quot;: [[...]],}# 每個智能體都需要定義一個行為來返回他們的觀測值\u0026gt; new_obs, rewards, dones, infos = env.step(actions={\u0026quot;car_1\u0026quot;: ...,?\u0026quot;car_2\u0026quot;: ...})# 同樣的,新的觀測值,激勵,完成的,信息等也是字典形式\u0026gt; print(rewards){\u0026quot;car_1\u0026quot;:?3,?\u0026quot;car_2\u0026quot;:?-1,?\u0026quot;traffic_light_1\u0026quot;:?0}# 獨立的智能體可以早早離開; 當\u0026quot;__all__\u0026quot;設置為True時,環境配置完成。\u0026gt; print(dones){\u0026quot;car_2\u0026quot;:?True,?\u0026quot;__all__\u0026quot;:?False}

OpenAI gym中的任何離散的Box、Dict或者Tuple都可以為這些獨立的智能體提供支持,每個智能體都允許接受多種類型的輸入(包括智能體間的通信)。

多級的API支持

在較高的層次上,RLib模型將智能體和策略建模為在一段持續時間內可以互相綁定的對象(如圖7所示)。用戶可以在不同程度上使用這一抽象的對象,從僅使用一個單智能體共享策略到多策略,再到完全自定義的策略優化:

\"image\"

圖10:RLib中的多智能體執行與單智能體執行模型對比

級別1:多智能體,共享策略

如果環境中的所有智能體都是同質的(例如,在交通模擬中的多個獨立的車輛),則可以使用現有的單智能體算法進行訓練。由于只有一個策略被訓練,因此RLib只需要在策略優化之前在內部累積不同智能體的經驗,用戶方面的變化則很小。

單智能體的情況:

register_env(\u0026quot;your_env\u0026quot;,?lambda?c: YourEnv(...))trainer = PPOAgent(env=\u0026quot;your_env\u0026quot;)while?True:? ?print(trainer.train()) ?# distributed training step

多智能體的情況:

register_env(\u0026quot;your_multi_env\u0026quot;,?lambda?c: YourMultiEnv(...))trainer = PPOAgent(env=\u0026quot;your_multi_env\u0026quot;)while?True:? ?print(trainer.train()) ?# distributed training step

注意,此處的PPOAgent只是從單智能體API繼承的命名約定。它更像是智能體的一個訓練器而不是真正的智能體。

級別2:多智能體,多策略

這種情況下,需要定義每個智能體會被哪個策略處理。在RLib中可以通過策略映射函數處理此問題,該函數在智能體首次進入環境時將環境中的智能體分配給特定策略。下面的例子展示了一個分級控制設定,其中監督智能體將工作分配給它們監督的工作智能體。完成這一目標的所需配置是監督策略和工作策略的集合:

def?policy_mapper(agent_id):? ?if?agent_id.startswith(\u0026quot;supervisor_\u0026quot;):? ? ? ?return?\u0026quot;supervisor_policy\u0026quot;? ?else:? ? ? ?return?random.choice([\u0026quot;worker_p1\u0026quot;,?\u0026quot;worker_p2\u0026quot;])在本例中,我們通常將監督智能體與一個單獨的監督策略綁定,然后將其他工作智能體隨機分配給兩個不同的工作策略綁定。這些配置會在智能體首次進入環境時完成,并在智能體離開環境之前持續工作。最后,我們需要定義不止一個策略配置。這是作為上級智能體配置的一部分來完成的:trainer = PPOAgent(env=\u0026quot;control_env\u0026quot;, config={? ?\u0026quot;multiagent\u0026quot;: {? ? ? ?\u0026quot;policy_mapping_fn\u0026quot;: policy_mapper,? ? ? ?\u0026quot;policy_graphs\u0026quot;: {? ? ? ? ? ?\u0026quot;supervisor_policy\u0026quot;:? ? ? ? ? ? ? ? (PPOPolicyGraph, sup_obs_space, sup_act_space, sup_conf),? ? ? ? ? ?\u0026quot;worker_p1\u0026quot;: (? ? ? ? ? ? ? ?(PPOPolicyGraph, work_obs_s, work_act_s, work_p1_conf),? ? ? ? ? ?\u0026quot;worker_p2\u0026quot;:? ? ? ? ? ? ? ? (PPOPolicyGraph, work_obs_s, work_act_s, work_p2_conf),? ? ? ?},? ? ? ?\u0026quot;policies_to_train\u0026quot;: [? ? ? ? ? ? ?\u0026quot;supervisor_policy\u0026quot;,?\u0026quot;worker_p1\u0026quot;,?\u0026quot;worker_p2\u0026quot;],? ?},})while?True:? ?print(trainer.train()) ?# distributed training step

這將生成一個如圖5所示的配置。你可以為每個策略定制個性化的策略圖類,以及不同的策略配置字典。任何RLib的支持的定制(例如,自定義模型和預處理)都可以用于每個策略,以及新的策略類的批量定義。

其他示例:Sharing layers across policies、 Implementing a centralized critic

級別3:自定義訓練策略

對于一些高級的應用于研究情景,不可避免地會遇到一些框架方面的限制。

例如,假設需要多種訓練方法的情況:一些智能體將使用PPO進行學習,一些則使用DQN。這種情況下,可以通過在兩個不同的訓練器之間交換權重來完成(參考代碼),但這種方法的可擴展性較差,例如想加入新的算法或是想同時使用經驗對環境模型進行訓練的時候。

為了應對這種情況,RLib的底層系統Ray可以按需分配計算。Ray提供了兩個簡單的并行接口:

  • Tasks,通過func.remote()被異步執行的Python函數。
  • Actors,通過class.remote()在集群中被創建的Python類。Actor方法可以被actor.method.remote()調用。

RLib在Ray的tasks和actors上構建,為分布式強化學習提供工具包。其中包括:

  • 策略圖(之前示例已展示)
  • 策略評估:PolicyEvaluator類會對生成批量經驗的環境交互循環進行管理。當創建為Ray actors時,它可以用于在分布式環境中收集經驗。
  • 策略優化:這一部分用于對策略的優化。你可以使用現有的優化器,也可以使用自定義策略。

例如,你可以創建策略優化器以收集多智能體的輸出,然后對他們進行處理以提高策略:

# 初始化一個單節點的Ray集群ray.init()# 為自定義策略圖創建局部實例sup, w1, w2 = SupervisorPolicy(), WorkerPolicy(), WorkerPolicy()# 創建策略優化器 (Ray actor進程會在集群中運行)evaluators = []for?i?in?range(16):? ?ev = PolicyEvaluator.as_remote().remote(? ? ? ?env_creator=lambda?ctx: ControlEnv(),? ? ? ?policy_graph={? ? ? ? ? ? \u0026quot;supervisor_policy\u0026quot;: (SupervisorPolicy, ...),? ? ? ? ? ??\u0026quot;worker_p1\u0026quot;: ..., ...},? ? ? ?policy_mapping_fn=policy_mapper,? ? ? ?sample_batch_size=500)? ?evaluators.append(ev)while?True:? ?# Collect experiences in parallel using the policy evaluators? ?futures = [ev.sample.remote()?for?ev?in?evaluators]? ?batch = MultiAgentBatch.concat_samples(ray.get(futures))? ?# \u0026gt;\u0026gt;\u0026gt; print(batch)? ?# MultiAgentBatch({? ?# ? ? \u0026quot;supervisor_policy\u0026quot;: SampleBatch({? ?# ? ? ? ? ?\u0026quot;obs\u0026quot;: [[...], ...], \u0026quot;rewards\u0026quot;: [0, ...], ...? ?# ? ? ?}),? ?# ? ? \u0026quot;worker_p1\u0026quot;: SampleBatch(...),? ? # ? ? \u0026quot;worker_p2\u0026quot;: SampleBatch(...),? ?# })? ?your_optimize_func(sup, w1, w2, batch) ?# Custom policy optimization? ?# Broadcast new weights and repeat? ?for?ev?in?evaluators:? ? ? ?ev.set_weights.remote({? ? ? ? ? ?\u0026quot;supervisor_policy\u0026quot;: sup.get_weights(),? ? ? ? ? ?\u0026quot;worker_p1\u0026quot;: w1.get_weights(),? ? ? ? ? ?\u0026quot;worker_p2\u0026quot;: w2.get_weights(),? ? ? ? })

總之,RLib提供了多個層級的API,旨在提高其可定制性。在最高層級,這里提供了幾個簡單的“開箱即用”的訓練過程,但用戶也可以從核心的多智能體抽象對象中選擇使用自定義的算法和訓練策略。這里有一些可以直接運行的腳本供使用:?multiagent_cartpole.py,?multiagent_two_trainers.py.

性能表現

RLlib旨在擴展到大型集群以及多智能體模式,同時也提供類似向量化這種針對單核心效率的優化。這允許在小型機器上高效地使用多智能體API。

為了說明這些優化方法的重要性,下圖分析了單核心策略評估與環境中智能體數量的關系。在這個基準測試中,觀測值是小浮點向量,策略是小型16*16的全連接網絡。每個智能體被隨機分配給10個這樣的策略網絡。RLib在每個環境中的10000個智能體上管理超過70k actions/s/core(此時Python的計算開銷就變成了瓶頸)。當向量化功能關閉的時候,經驗累積的速度降低了40倍:

\"image\"

RISELab還評估了在環境中使用多個不同策略網絡的更具挑戰性的情況。在這里,仍然可以利用向量化將多個TensorFlow調用融合為一個,從而獲得更穩定的單核性能,下圖是不同策略的數量從1擴展到50的評估結果:

\"image\"

結論

這篇博文介紹了一個快速,通用的多智能體強化學習框架。

RISELab目前正與BAIR,Berkeley FLow team和行業的早期用戶合作,以??進一步改進RLlib。

快嘗試使用’pip install ray [rllib]'快速安裝RLib,并運行你自己的測試用例吧。

有關RLlib和多代理支持的文檔,請訪問https://rllib.io。

查看英文原文:An Open Source Tool for Scaling Multi-Agent Reinforcement Learning

\"image\"

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

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

相關文章

相機電子快門和機械快門有什么區別

https://zhidao.baidu.com/question/9178007.html

Long

而由于javascript數字的最大值2的53次方-1,以及PHP的數字處理能力,比如number_format(9027199254740993, 0, , )轉載于:https://www.cnblogs.com/sfsdst/p/6734083.html

操作系統實驗以及課程設計

趁沒人,當個小白來偷偷摸摸補一下操作系統的課程,羞反正操作系統斷斷續續的看了一點了,主要是偏linux的。FreeBSD的實現,操作系統概念,30天自制操作系統等。Linux的話命令用的還行,沒有很深入的搞。看操作系…

關于星光級和低照度你了解多少?

http://www.tpy888.cn/news/201607/22/89214.html

AI界的妖風

最近一篇文章https://zhuanlan.zhihu.com/p/50948707深度學習碰上古文獻,西南大學提出基于CNN的古彝文識別方法 我預計不久之后就會出現一個現象:不光有彝族文字識別,還有蒙文識別,藏文識別,苗文識別 然后各位教授一起…

poj1936

非連續子串匹配題&#xff0c;直接模擬 /** \brief poj 1936** \param date 2014/8/5* \param state AC* \return memory 804k time 0ms**/#include <iostream> #include <fstream> #include <cstring>using namespace std;const int MAXN100000; char s[MAX…

Process和ProcessBuilder入門【原】

ProcessBuilder優點 ProcessBuilder(XXX).start()和Runtime.exec(XXX)功能相同,主要優點在使用過程中感受有: 前者是jdk1.5后的新方式配置環境變量時更優雅對當前目錄的控制也更合理錯誤流重定向特別方便 進程控制更簡潔ProcessTool.java package test;import java.io.Buffered…

如何簡單理解光圈大小對手機攝影的影響?

你&#xff0c;準備好參加今夏的朋友圈攝影大賽了嗎&#xff1f; 現在的天氣有多熱&#xff0c;誰出門誰知道&#xff01;出去玩還要背一臺單反&#xff0c;絕對可以說是一種折磨了。但是&#xff0c;如果你擁有一臺大光圈的手機&#xff0c;一樣可以在朋友圈脫穎而出。 那么…

基于centos6.7的docker私有倉庫搭建

2019獨角獸企業重金招聘Python工程師標準>>> 1 倉庫配置https認證 cd /etc/docker/ mkdir certs [rootdocker01 docker]# openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/docker01.key -x509 -days 365 -out certs/docker01.crt 填好相應的簡稱及email…

第十周軟件工程作業-每周例行報告

一、PSP T名稱C內容ST開始時間ED結束時間中斷時間/min實際時間/min會議第一次Scrum會議11月17日16:0011月17日16:30030第二次Scrum會議11月18日15:0011月18日15:30030第三次Scrum會議11月19日17:0011月19日17:30030第四次Scrum會議11月20日11:3511月20日12:15040第五次Scrum會議…

卷簾快門與全局快門的區別

https://wenku.baidu.com/view/2f0c8da0ce2f0066f5332283.html

MAVEN下載和安裝

1.maven的下載 下載鏈接http://maven.apache.org/download.cgi從該網站下載最新版本 2.maven的安裝 電腦上需要安裝JDK環境&#xff0c;需要安裝JDK7以上的版本。下載之后進行解壓&#xff0c;將maven解壓到不含中文和空格的一個目錄 maven目錄結構bin目錄&#xff1a;mvn.bat、…

洛谷 P3391 【模板】文藝平衡樹

題目背景 這是一道經典的Splay模板題——文藝平衡樹。 題目描述 您需要寫一種數據結構&#xff0c;來維護一個有序數列&#xff0c;其中需要提供以下操作&#xff1a;翻轉一個區間&#xff0c;例如原有序序列是5 4 3 2 1&#xff0c;翻轉區間是[2,4]的話&#xff0c;結果是5 2 …

CCD/CMOS靶面尺寸型號標準

傳感器尺寸指的是感光器對角線尺寸&#xff0c;1/1.7英寸&#xff08;14.8毫米&#xff0d;&#xff0d;導向管尺寸&#xff09;大于1/2.3英寸&#xff08;10.95毫米&#xff0d;&#xff0d;&#xff0d;導向管尺寸&#xff09;.采用同種技術水平的感光器&#xff0c;肯定是單…

分布式學習基礎知識

網絡通訊&#xff0c;網絡是分布式的基礎&#xff0c;對分布式的理解建立在對網絡的理解上&#xff0c;包括&#xff1a; OSI模型的7層TCP/IP&#xff0c;DNS&#xff0c;NATHTTP&#xff0c;SPDY/HTTP2Telnet網絡編程&#xff0c;是通過程序在多個主機之間通信。包括&#xff…

django中FastDFS客戶端與自定義文件存儲系統

什么是FastDFSFastDFS 是用 c 語言編寫的一款開源的分布式文件系統。FastDFS 為互聯網量身定制&#xff0c; 充分考慮了冗余備份、負載均衡、線性擴容等機制&#xff0c;并注重高可用、高性能等指標&#xff0c;使用 FastDFS 很容易搭建一套高性能的文件服務器集群提供文件上傳…

新近碰到的病毒(TR.Spy.Babonock.A)

先來段Microsoft的說明&#xff1a; Worm:Win32/Babonock.A Alert level: Severe Detected with Windows Defender Antivirus Also detected as:Worm/Win32.AutoIt (AhnLab)Trojan-Spy.Win32.AutoIt.p (Kaspersky)Worm/Autoit.ANVE (AVG)TR/Spy.Babonock.A (Avira)Win32/Autoit…

鏡頭基本參數

非常好的文章 &#xff0c;下載不了&#xff0c;但是會經常閱讀。 https://wenku.baidu.com/view/47a7deddee06eff9aff8074e.html?rec_flagdefault&sxts1529650964474

Linux課程筆記 Day09 課上內容總結 MySql,Php的安裝及Apache,Nginx,Php的優化

一 MySql 1.1 如何選擇MySql的版本 1.2 MySql單實例安裝 &#xff08;1&#xff09; 建立mysql用戶 首先以root身份登陸到linux系統&#xff0c;然后執行如下命令創建mysql用戶及用戶組 [roottest3 ~]# groupadd mysql [roottest3 ~]# useradd -s /sbin/nologin -g …

jenkins 通過自動拉取Gitlab上的代碼實現自動更新NGINX

所需要用到的環境&#xff1a; Gitlab&#xff1a; 172.20.7.70Jenkins&#xff1a; 172.20.7.71nginx&#xff1a; 172.20.7.72 gitlab 和Jenkins安裝自行百度 開始實驗操作 首先通過網頁訪問nginx&#xff0c;nginx默認測試頁我是改了的 &#xff0c;所以看到的不是它原…