dsub
เป็นเครื่องมือบรรทัดคำสั่งที่ทำให้ส่งและรันสคริปต์แบบแบตช์ในระบบคลาวด์ได้ง่าย
ประสบการณ์ผู้ใช้ dsub
จำลองมาจากตัวกำหนดเวลางานการประมวลผลประสิทธิภาพสูงแบบดั้งเดิม เช่น Grid Engine และ Slurm คุณเขียนสคริปต์แล้วส่งไปยังตัวกำหนดเวลางานจากพรอมต์เชลล์บนเครื่องของคุณ
ปัจจุบัน dsub
รองรับ Google Cloud ในฐานะผู้ดำเนินการงานแบ็กเอนด์ร่วมกับผู้ให้บริการในพื้นที่สำหรับการพัฒนาและการทดสอบ ด้วยความช่วยเหลือจากชุมชน เราต้องการเพิ่มแบ็กเอนด์อื่นๆ เช่น Grid Engine, Slurm, Amazon Batch และ Azure Batch
dsub
เขียนด้วย Python และต้องใช้ Python 3.7 ขึ้นไป
dsub
0.4.7dsub
0.4.1dsub
0.3.10นี่เป็นทางเลือก แต่ไม่ว่าจะติดตั้งจาก PyPI หรือจาก github เราขอแนะนำให้คุณใช้สภาพแวดล้อมเสมือน Python
คุณสามารถทำได้ในไดเร็กทอรีที่คุณเลือก
python3 -m venv dsub_libs
source dsub_libs/bin/activate
การใช้สภาพแวดล้อมเสมือน Python จะแยกการพึ่งพาไลบรารี dsub
ออกจากแอปพลิเคชัน Python อื่นๆ บนระบบของคุณ
เปิดใช้งานสภาพแวดล้อมเสมือนนี้ในเซสชันเชลล์ก่อนที่จะรัน dsub
หากต้องการปิดใช้งานสภาพแวดล้อมเสมือนในเชลล์ของคุณ ให้รันคำสั่ง:
deactivate
อีกทางหนึ่ง มีการจัดเตรียมชุดสคริปต์อำนวยความสะดวกที่เปิดใช้งาน virutalenv ก่อนที่จะเรียก dsub
, dstat
และ ddel
พวกเขาอยู่ในไดเร็กทอรี bin คุณสามารถใช้สคริปต์เหล่านี้ได้หากคุณไม่ต้องการเปิดใช้งาน virtualenv อย่างชัดเจนในเชลล์ของคุณ
แม้ว่าจะไม่ได้ใช้โดยตรงโดย dsub
สำหรับผู้ให้บริการ google-batch
หรือ google-cls-v2
แต่คุณก็น่าจะต้องการติดตั้งเครื่องมือบรรทัดคำสั่งที่พบใน Google Cloud SDK
หากคุณจะใช้ผู้ให้บริการ local
เพื่อการพัฒนางานที่รวดเร็วขึ้น คุณ จะ ต้องติดตั้ง Google Cloud SDK ซึ่งใช้ gsutil
เพื่อให้แน่ใจว่าความหมายของการทำงานของไฟล์สอดคล้องกับผู้ให้บริการ dsub
ของ Google
ติดตั้ง Google Cloud SDK
วิ่ง
gcloud init
gcloud
จะแจ้งให้คุณตั้งค่าโปรเจ็กต์เริ่มต้นและมอบข้อมูลรับรองให้กับ Google Cloud SDK
dsub
เลือก อย่างใดอย่างหนึ่ง ต่อไปนี้:
หากจำเป็น ให้ติดตั้ง pip
ติดตั้ง dsub
pip install dsub
ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้งคอมไพล์แล้ว
คำแนะนำสำหรับสภาพแวดล้อมของคุณสามารถพบได้บนเว็บไซต์ git
โคลนที่เก็บนี้
git clone https://github.com/DataBiosphere/dsub
cd dsub
ติดตั้ง dsub (ซึ่งจะติดตั้งการอ้างอิงด้วย)
python -m pip install .
ตั้งค่าการทำให้แท็บ Bash สมบูรณ์ (ไม่บังคับ)
source bash_tab_complete
ตรวจสอบการติดตั้งน้อยที่สุดโดยการรัน:
dsub --help
(ไม่บังคับ) ติดตั้ง Docker
นี่เป็นสิ่งจำเป็นเฉพาะในกรณีที่คุณต้องการสร้างอิมเมจ Docker ของคุณเองหรือใช้ผู้ให้บริการ local
หลังจากการโคลน repo dsub คุณยังสามารถใช้ Makefile ได้โดยการรัน:
make
สิ่งนี้จะสร้างสภาพแวดล้อมเสมือน Python และติดตั้ง dsub
ลงในไดเร็กทอรีชื่อ dsub_libs
เราคิดว่าคุณจะพบว่าผู้ให้บริการ local
จะมีประโยชน์อย่างมากในการสร้างงาน dsub
ของคุณ แทนที่จะส่งคำขอเพื่อรันคำสั่งของคุณบน Cloud VM ผู้ให้บริการ local
จะรันงาน dsub
ของคุณบนเครื่องภายในของคุณ
ผู้ให้บริการ local
ไม่ได้ออกแบบมาเพื่อการทำงานในวงกว้าง ได้รับการออกแบบมาเพื่อจำลองการทำงานบน Cloud VM เพื่อให้คุณสามารถทำซ้ำได้อย่างรวดเร็ว คุณจะได้รับเวลาดำเนินการที่รวดเร็วขึ้น และจะไม่ต้องเสียค่าบริการคลาวด์หากใช้งาน
รันงาน dsub
และรอให้เสร็จสิ้น
ต่อไปนี้เป็นการทดสอบ "Hello World" ที่ง่ายมาก:
dsub
--provider local
--logging "${TMPDIR:-/tmp}/dsub-test/logging/"
--output OUT="${TMPDIR:-/tmp}/dsub-test/output/out.txt"
--command 'echo "Hello World" > "${OUT}"'
--wait
หมายเหตุ: โดยทั่วไป TMPDIR
จะถูกตั้งค่าเป็น /tmp
ตามค่าเริ่มต้นในระบบ Unix ส่วนใหญ่ แม้ว่ามักจะไม่ได้ตั้งค่าก็ตาม ใน MacOS TMPDIR บางเวอร์ชันจะถูกตั้งค่าเป็นตำแหน่งภายใต้ /var/folders
หมายเหตุ: ไวยากรณ์ข้างต้น ${TMPDIR:-/tmp}
เป็นที่ทราบกันว่ารองรับโดย Bash, zsh, ksh เชลล์จะขยาย TMPDIR
แต่หากไม่มีการตั้งค่า /tmp
จะถูกใช้
ดูไฟล์เอาต์พุต
cat "${TMPDIR:-/tmp}/dsub-test/output/out.txt"
ปัจจุบัน dsub
รองรับ Cloud Life Sciences v2beta API จาก Google Cloud และกำลังพัฒนาการสนับสนุน Batch API จาก Google Cloud
dsub
รองรับ v2beta API ด้วยผู้ให้บริการ google-cls-v2
google-cls-v2
เป็นผู้ให้บริการเริ่มต้นปัจจุบัน dsub
จะเปลี่ยนไปใช้ google-batch
เป็นค่าเริ่มต้นในรุ่นต่อๆ ไป
ขั้นตอนในการเริ่มต้นจะแตกต่างกันเล็กน้อยตามที่ระบุไว้ในขั้นตอนด้านล่าง:
ลงทะเบียนสำหรับบัญชี Google และสร้างโครงการ
เปิดใช้งาน API:
v2beta
API (ผู้ให้บริการ: google-cls-v2
):เปิดใช้ Cloud Life Sciences, Storage และ Compute API
batch
API (ผู้ให้บริการ: google-batch
):เปิดใช้งาน Batch, Storage และ Compute API
ระบุข้อมูลประจำตัวเพื่อให้ dsub
สามารถเรียก Google API ได้:
gcloud auth application-default login
สร้างที่เก็บข้อมูล Google Cloud Storage
บันทึก dsub และไฟล์เอาต์พุตจะถูกเขียนลงในที่เก็บข้อมูล สร้างที่เก็บข้อมูลโดยใช้เบราว์เซอร์พื้นที่เก็บข้อมูลหรือเรียกใช้ยูทิลิตีบรรทัดคำสั่ง gsutil ซึ่งรวมอยู่ใน Cloud SDK
gsutil mb gs://my-bucket
เปลี่ยน my-bucket
เป็นชื่อเฉพาะที่เป็นไปตามแบบแผนการตั้งชื่อที่เก็บข้อมูล
(โดยค่าเริ่มต้น ที่เก็บข้อมูลจะอยู่ในสหรัฐอเมริกา แต่คุณสามารถเปลี่ยนหรือปรับแต่งการตั้งค่าตำแหน่งได้ด้วยตัวเลือก -l
)
รันงาน dsub
"Hello World" ที่ง่ายมาก และรอให้เสร็จสิ้น
สำหรับ v2beta
API (ผู้ให้บริการ: google-cls-v2
):
dsub
--provider google-cls-v2
--project my-cloud-project
--regions us-central1
--logging gs://my-bucket/logging/
--output OUT=gs://my-bucket/output/out.txt
--command 'echo "Hello World" > "${OUT}"'
--wait
เปลี่ยน my-cloud-project
เป็นโปรเจ็กต์ Google Cloud ของคุณ และ my-bucket
เป็น bucket ที่คุณสร้างไว้ด้านบน
สำหรับ batch
API (ผู้ให้บริการ: google-batch
):
dsub
--provider google-batch
--project my-cloud-project
--regions us-central1
--logging gs://my-bucket/logging/
--output OUT=gs://my-bucket/output/out.txt
--command 'echo "Hello World" > "${OUT}"'
--wait
เปลี่ยน my-cloud-project
เป็นโปรเจ็กต์ Google Cloud ของคุณ และ my-bucket
เป็น bucket ที่คุณสร้างไว้ด้านบน
เอาต์พุตของคำสั่งสคริปต์จะเขียนลงในไฟล์ OUT
ใน Cloud Storage ที่คุณระบุ
ดูไฟล์เอาต์พุต
gsutil cat gs://my-bucket/output/out.txt
หากเป็นไปได้ dsub
จะพยายามสนับสนุนผู้ใช้สามารถพัฒนาและทดสอบภายในเครื่อง (เพื่อการทำซ้ำที่เร็วขึ้น) จากนั้นจึงดำเนินการไปสู่การทำงานในวงกว้าง
ด้วยเหตุนี้ dsub
จึงจัดให้มี "ผู้ให้บริการแบ็กเอนด์" หลายราย ซึ่งแต่ละรายใช้สภาพแวดล้อมรันไทม์ที่สอดคล้องกัน ผู้ให้บริการปัจจุบันคือ:
รายละเอียดเพิ่มเติมเกี่ยวกับสภาพแวดล้อมรันไทม์ที่ผู้ให้บริการแบ็กเอนด์ใช้งานมีอยู่ในผู้ให้บริการแบ็กเอนด์ dsub
google-cls-v2
และ google-batch
ผู้ให้บริการ google-cls-v2
สร้างขึ้นบน Cloud Life Sciences v2beta
API API นี้คล้ายกับ Genomics v2alpha1
API รุ่นก่อนมาก ดูรายละเอียดความแตกต่างได้ในคู่มือการย้ายข้อมูล
ผู้ให้บริการ google-batch
สร้างขึ้นบน Cloud Batch API รายละเอียดของ Cloud Life Sciences และ Batch มีอยู่ในคู่มือการย้ายข้อมูลนี้
dsub
ซ่อนความแตกต่างระหว่าง API ไว้เป็นส่วนใหญ่ แต่มีข้อแตกต่างบางประการที่ควรทราบ:
google-batch
ต้องมีงานจึงจะทำงานในภูมิภาคเดียว แฟล็ก --regions
และ --zones
สำหรับ dsub
ระบุตำแหน่งที่งานควรรัน google-cls-v2
ช่วยให้คุณระบุหลายภูมิภาค เช่น US
หลายภูมิภาค หรือหลายโซนข้ามภูมิภาค เมื่อใช้ผู้ให้บริการ google-batch
คุณต้องระบุภูมิภาคเดียวหรือหลายโซนภายในภูมิภาคเดียว
dsub
ส่วนต่อไปนี้แสดงวิธีการรันงานที่ซับซ้อนมากขึ้น
คุณสามารถจัดเตรียมคำสั่งเชลล์ได้โดยตรงในบรรทัดคำสั่ง dsub ดังในตัวอย่างสวัสดีด้านบน
คุณยังสามารถบันทึกสคริปต์ของคุณลงในไฟล์ เช่น hello.sh
ได้ จากนั้นคุณสามารถเรียกใช้:
dsub
...
--script hello.sh
หากสคริปต์ของคุณมีการขึ้นต่อกันที่ไม่ได้จัดเก็บไว้ในอิมเมจ Docker คุณสามารถถ่ายโอนสคริปต์เหล่านั้นไปยังดิสก์ภายในเครื่องได้ ดูคำแนะนำด้านล่างสำหรับการทำงานกับไฟล์และโฟลเดอร์อินพุตและเอาต์พุต
เพื่อให้เริ่มต้นได้ง่ายขึ้น dsub
ใช้อิมเมจ Ubuntu Docker ในสต็อก รูปภาพเริ่มต้นนี้อาจเปลี่ยนแปลงได้ตลอดเวลาในการเผยแพร่ในอนาคต ดังนั้นสำหรับเวิร์กโฟลว์การผลิตที่ทำซ้ำได้ คุณควรระบุรูปภาพอย่างชัดเจนเสมอ
คุณสามารถเปลี่ยนรูปภาพได้โดยส่งแฟล็ก --image
dsub
...
--image ubuntu:16.04
--script hello.sh
หมายเหตุ: --image
ของคุณต้องมีล่าม Bash shell
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้แฟล็ก --image
โปรดดูส่วนรูปภาพในสคริปต์ คำสั่ง และ Docker
คุณสามารถส่งผ่านตัวแปรสภาพแวดล้อมไปยังสคริปต์ของคุณโดยใช้แฟล็ก --env
dsub
...
--env MESSAGE=hello
--command 'echo ${MESSAGE}'
ตัวแปรสภาพแวดล้อม MESSAGE
จะได้รับการกำหนดค่า hello
เมื่อคอนเทนเนอร์ Docker ของคุณทำงาน
สคริปต์หรือคำสั่งของคุณสามารถอ้างอิงตัวแปรได้เช่นเดียวกับตัวแปรสภาพแวดล้อม Linux อื่นๆ เป็น ${MESSAGE}
ตรวจสอบให้แน่ใจว่าได้ใส่สตริงคำสั่งของคุณด้วยเครื่องหมายคำพูดเดี่ยวและไม่ใช่เครื่องหมายคำพูดคู่ หากคุณใช้เครื่องหมายคำพูดคู่ คำสั่งจะถูกขยายในเชลล์ในเครื่องของคุณก่อนที่จะส่งต่อไปยัง dsub สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้แฟล็ก --command
โปรดดูสคริปต์ คำสั่ง และ Docker
หากต้องการตั้งค่าตัวแปรสภาพแวดล้อมหลายรายการ คุณสามารถทำซ้ำแฟล็กได้:
--env VAR1=value1
--env VAR2=value2
คุณยังสามารถตั้งค่าตัวแปรหลายตัวโดยคั่นด้วยช่องว่างด้วยแฟล็กเดียว:
--env VAR1=value1 VAR2=value2
dsub เลียนแบบพฤติกรรมของระบบไฟล์ที่ใช้ร่วมกันโดยใช้เส้นทางบัคเก็ตของพื้นที่เก็บข้อมูลบนคลาวด์สำหรับไฟล์และโฟลเดอร์อินพุตและเอาต์พุต คุณระบุเส้นทางที่เก็บข้อมูลบนคลาวด์ เส้นทางสามารถ:
gs://my-bucket/my-file
gs://my-bucket/my-folder
gs://my-bucket/my-folder/*
ดูเอกสารประกอบอินพุตและเอาต์พุตสำหรับรายละเอียดเพิ่มเติม
หากสคริปต์ของคุณคาดว่าจะอ่านไฟล์อินพุตในเครื่องที่ยังไม่มีอยู่ในอิมเมจ Docker ไฟล์เหล่านั้นจะต้องพร้อมใช้งานใน Google Cloud Storage
หากสคริปต์ของคุณมีไฟล์ที่ต้องพึ่งพา คุณสามารถทำให้สคริปต์ของคุณพร้อมใช้งานได้โดย:
หากต้องการอัปโหลดไฟล์ไปยัง Google Cloud Storage คุณสามารถใช้เบราว์เซอร์พื้นที่เก็บข้อมูลหรือ gsutil คุณยังสามารถเรียกใช้ข้อมูลที่เปิดเผยต่อสาธารณะหรือแชร์กับบัญชีบริการของคุณ ซึ่งเป็นที่อยู่อีเมลที่คุณพบได้ใน Google Cloud Console
หากต้องการระบุไฟล์อินพุตและเอาต์พุตให้ใช้แฟล็ก --input
และ --output
:
dsub
...
--input INPUT_FILE_1=gs://my-bucket/my-input-file-1
--input INPUT_FILE_2=gs://my-bucket/my-input-file-2
--output OUTPUT_FILE=gs://my-bucket/my-output-file
--command 'cat "${INPUT_FILE_1}" "${INPUT_FILE_2}" > "${OUTPUT_FILE}"'
ในตัวอย่างนี้:
gs://my-bucket/my-input-file-1
ไปยังเส้นทางบนดิสก์ข้อมูล${INPUT_FILE_1}
gs://my-bucket/my-input-file-2
ไปยังเส้นทางบนดิสก์ข้อมูล${INPUT_FILE_2}
--command
สามารถอ้างอิงเส้นทางของไฟล์โดยใช้ตัวแปรสภาพแวดล้อม
นอกจากนี้ในตัวอย่างนี้:
${OUTPUT_FILE}
${OUTPUT_FILE}
หลังจากคำ --command
เสร็จสิ้น ไฟล์เอาต์พุตจะถูกคัดลอกไปยังเส้นทางที่เก็บข้อมูล gs://my-bucket/my-output-file
สามารถระบุพารามิเตอร์ --input
และ --output
หลายตัวได้ และสามารถระบุตามลำดับใดก็ได้
หากต้องการคัดลอกโฟลเดอร์แทนที่จะเป็นไฟล์ให้ใช้แฟล็ก --input-recursive
และ output-recursive
:
dsub
...
--input-recursive FOLDER=gs://my-bucket/my-folder
--command 'find ${FOLDER} -name "foo*"'
สามารถระบุพารามิเตอร์ --input-recursive
และ --output-recursive
หลายรายการได้ และสามารถระบุตามลำดับใดก็ได้
แม้ว่าการระบุอินพุตอย่างชัดเจนจะช่วยปรับปรุงแหล่งที่มาในการติดตามข้อมูลของคุณ แต่ก็มีกรณีที่คุณอาจไม่ต้องการแปลอินพุตทั้งหมดจาก Cloud Storage ไปยัง VM งานของคุณอย่างชัดเจน
ตัวอย่างเช่น หากคุณมี:
หรือ
หรือ
จากนั้นคุณอาจพบว่าการเข้าถึงข้อมูลนี้มีประสิทธิภาพหรือสะดวกกว่าโดยการติดตั้งแบบอ่านอย่างเดียว:
ผู้ให้บริการ google-cls-v2
และ google-batch
รองรับวิธีการเหล่านี้ในการให้การเข้าถึงข้อมูลทรัพยากร
ผู้ให้บริการ local
สนับสนุนการติดตั้งไดเร็กทอรีในเครื่องในลักษณะเดียวกันเพื่อสนับสนุนการพัฒนาในเครื่องของคุณ
หากต้องการให้ผู้ให้บริการ google-cls-v2
หรือ google-batch
ติดตั้งที่เก็บข้อมูล Cloud Storage โดยใช้ Cloud Storage FUSE ให้ใช้แฟล็กบรรทัดคำสั่ง --mount
:
--mount RESOURCES=gs://mybucket
ที่เก็บข้อมูลจะถูกติดตั้งแบบอ่านอย่างเดียวในคอนเทนเนอร์ Docker ที่รัน --script
หรือ --command
ของคุณ และตำแหน่งที่ทำให้พร้อมใช้งานผ่านตัวแปรสภาพแวดล้อม ${RESOURCES}
ภายในสคริปต์ของคุณ คุณสามารถอ้างอิงเส้นทางที่เมาท์ได้โดยใช้ตัวแปรสภาพแวดล้อม โปรดอ่านความแตกต่างที่สำคัญจากระบบไฟล์ POSIX และซีแมนทิกส์ก่อนใช้ Cloud Storage FUSE
หากต้องการให้ผู้ให้บริการ google-cls-v2
หรือ google-batch
ติดตั้งดิสก์ถาวรที่คุณสร้างและเติมไว้ล่วงหน้า ให้ใช้แฟล็กบรรทัดคำสั่ง --mount
และ URL ของดิสก์ต้นทาง:
--mount RESOURCES="https://www.googleapis.com/compute/v1/projects/your-project/zones/your_disk_zone/disks/your-disk"
หากต้องการให้ผู้ให้บริการ google-cls-v2
หรือ google-batch
เมานต์ดิสก์ถาวรที่สร้างจากรูปภาพ ให้ใช้แฟล็กบรรทัดคำสั่ง --mount
และ URL ของอิมเมจต้นฉบับและขนาด (เป็น GB) ของดิสก์:
--mount RESOURCES="https://www.googleapis.com/compute/v1/projects/your-project/global/images/your-image 50"
ระบบจะใช้อิมเมจเพื่อสร้างดิสก์ถาวรใหม่ซึ่งจะแนบกับ Compute Engine VM ดิสก์จะถูกติดตั้งลงในคอนเทนเนอร์ Docker ที่รัน --script
หรือ --command
ของคุณและตำแหน่งที่ทำให้พร้อมใช้งานโดยตัวแปรสภาพแวดล้อม ${RESOURCES}
ภายในสคริปต์ของคุณ คุณสามารถอ้างอิงเส้นทางที่เมาท์ได้โดยใช้ตัวแปรสภาพแวดล้อม
หากต้องการสร้างรูปภาพ โปรดดูที่การสร้างรูปภาพแบบกำหนดเอง
local
) หากต้องการให้ผู้ให้ local
โลคัลเมานต์ไดเร็กทอรีแบบอ่านอย่างเดียว ให้ใช้แฟล็กบรรทัดคำสั่ง --mount
และคำนำหน้า file://
:
--mount RESOURCES=file://path/to/my/dir
ไดเร็กทอรีในเครื่องจะถูกติดตั้งลงในคอนเทนเนอร์ Docker ที่รัน --script
หรือ --command
และตำแหน่งที่เปิดให้ใช้งานผ่านตัวแปรสภาพแวดล้อม ${RESOURCES}
ภายในสคริปต์ของคุณ คุณสามารถอ้างอิงเส้นทางที่เมาท์ได้โดยใช้ตัวแปรสภาพแวดล้อม
งาน dsub
ที่ทำงานโดยใช้ผู้ให้บริการ local
จะใช้ทรัพยากรที่มีอยู่ในเครื่องของคุณ
งาน dsub
ที่ทำงานโดยใช้ผู้ให้บริการ google-cls-v2
หรือ google-batch
สามารถใช้ประโยชน์จากตัวเลือก CPU, RAM, ดิสก์ และตัวเร่งความเร็วฮาร์ดแวร์ (เช่น GPU) ได้หลากหลาย
ดูเอกสารประกอบทรัพยากรคอมพิวเตอร์สำหรับรายละเอียด
ตามค่าเริ่มต้น dsub
จะสร้าง job-id
ด้วยแบบฟอร์ม job-name--userid--timestamp
โดยที่ job-name
ถูกตัดทอนลงที่ 10 อักขระ และ timestamp
อยู่ในรูปแบบ YYMMDD-HHMMSS-XX
ซึ่งไม่ซ้ำกับหนึ่งในร้อยของวินาที . หากคุณกำลังส่งงานหลายงานพร้อมกัน คุณอาจยังพบสถานการณ์ที่ job-id
ไม่ซ้ำกัน หากคุณต้องการ job-id
เฉพาะสำหรับสถานการณ์นี้ คุณสามารถใช้พารามิเตอร์ --unique-job-id
หากมีการตั้งค่าพารามิเตอร์ --unique-job-id
job-id
จะเป็น UUID 32 อักขระที่ไม่ซ้ำกันซึ่งสร้างโดย https://docs.python.org/3/library/uuid.html แทน เนื่องจากผู้ให้บริการบางรายกำหนดให้ job-id
ขึ้นต้นด้วยตัวอักษร dsub
จะแทนที่หลักเริ่มต้นใดๆ ด้วยตัวอักษรในลักษณะที่คงเอกลักษณ์ไว้
ตัวอย่างแต่ละตัวอย่างข้างต้นได้สาธิตการส่งงานเดียวโดยมีตัวแปร อินพุต และเอาต์พุตชุดเดียว หากคุณมีอินพุตจำนวนมากและต้องการเรียกใช้การดำเนินการเดียวกันกับอินพุตเหล่านั้น dsub
อนุญาตให้คุณสร้างงานแบตช์ได้
แทนที่จะเรียก dsub
ซ้ำๆ คุณสามารถสร้างไฟล์ tab-separated Values (TSV) ที่มีตัวแปร อินพุต และเอาต์พุตสำหรับแต่ละงาน จากนั้นเรียก dsub
หนึ่งครั้ง ผลลัพธ์จะเป็น job-id
เดียวที่มีหลายงาน งานจะถูกกำหนดเวลาและดำเนินการแยกกัน แต่สามารถตรวจสอบและลบเป็นกลุ่มได้
บรรทัดแรกของไฟล์ TSV ระบุชื่อและประเภทของพารามิเตอร์ ตัวอย่างเช่น:
--env SAMPLE_ID<tab>--input VCF_FILE<tab>--output OUTPUT_PATH
แต่ละบรรทัดเพิ่มเติมในไฟล์ควรระบุค่าตัวแปร อินพุต และเอาต์พุตสำหรับแต่ละงาน แต่ละบรรทัดที่อยู่เหนือส่วนหัวแสดงถึงค่าสำหรับงานที่แยกจากกัน
สามารถระบุพารามิเตอร์ --env
, --input
และ --output
หลายตัวได้ และสามารถระบุตามลำดับใดก็ได้ ตัวอย่างเช่น:
--env SAMPLE<tab>--input A<tab>--input B<tab>--env REFNAME<tab>--output O
S1<tab>gs://path/A1.txt<tab>gs://path/B1.txt<tab>R1<tab>gs://path/O1.txt
S2<tab>gs://path/A2.txt<tab>gs://path/B2.txt<tab>R2<tab>gs://path/O2.txt
ส่งไฟล์ TSV ไปที่ dsub โดยใช้พารามิเตอร์ --tasks
พารามิเตอร์นี้ยอมรับทั้งพาธของไฟล์และช่วงของงานที่ต้องประมวลผล ไฟล์อาจอ่านได้จากระบบไฟล์ในเครื่อง (บนเครื่องที่คุณเรียกใช้ dsub
) หรือจากที่เก็บข้อมูลใน Google Cloud Storage (ชื่อไฟล์ขึ้นต้นด้วย "gs://")
ตัวอย่างเช่น สมมติว่า my-tasks.tsv
มี 101 บรรทัด: ส่วนหัวแบบหนึ่งบรรทัดและพารามิเตอร์ 100 บรรทัดสำหรับงานที่จะรัน แล้ว:
dsub ... --tasks ./my-tasks.tsv
จะสร้างงาน 100 งาน ในขณะที่:
dsub ... --tasks ./my-tasks.tsv 1-10
จะสร้างงานที่มี 10 งาน หนึ่งงานสำหรับแต่ละบรรทัดที่ 2 ถึง 11
ค่าช่วงงานอาจอยู่ในรูปแบบใดๆ ต่อไปนี้:
m
หมายถึงส่งงาน m
(บรรทัด m+1)m-
หมายถึงส่งงานทั้งหมดที่เริ่มต้นด้วยงาน m
mn
หมายถึงส่งงานทั้งหมดตั้งแต่ m
ถึง n
(รวม) แฟล็ก --logging
ชี้ไปยังตำแหน่งสำหรับไฟล์บันทึกงาน dsub
สำหรับรายละเอียดเกี่ยวกับวิธีระบุเส้นทางการบันทึกของคุณ โปรดดูที่ การบันทึก
คุณสามารถรอให้งานเสร็จก่อนที่จะเริ่มงานอื่นได้ สำหรับรายละเอียด โปรดดูการควบคุมงานด้วย dsub
เป็นไปได้ที่ dsub
จะลองงานที่ล้มเหลวอีกครั้งโดยอัตโนมัติ สำหรับรายละเอียด โปรดดูลองอีกครั้งด้วย dsub
คุณสามารถเพิ่มป้ายกำกับที่กำหนดเองให้กับงานและงานต่างๆ ได้ ซึ่งช่วยให้คุณสามารถตรวจสอบและยกเลิกงานได้โดยใช้ตัวระบุของคุณเอง นอกจากนี้ เมื่อใช้ผู้ให้บริการ Google การติดป้ายกำกับงานจะติดป้ายกำกับทรัพยากรการประมวลผลที่เกี่ยวข้อง เช่น เครื่องเสมือนและดิสก์
สำหรับรายละเอียดเพิ่มเติม โปรดดูที่การตรวจสอบสถานะและงานการแก้ไขปัญหา
คำสั่ง dstat
แสดงสถานะของงาน:
dstat --provider google-cls-v2 --project my-cloud-project
หากไม่มีอาร์กิวเมนต์เพิ่มเติม dstat จะแสดงรายการงาน ที่กำลังทำงานอยู่ สำหรับ USER
ปัจจุบัน
หากต้องการแสดงสถานะของงานเฉพาะให้ใช้แฟล็ก --jobs
:
dstat --provider google-cls-v2 --project my-cloud-project --jobs job-id
สำหรับงานแบตช์ ผลลัพธ์จะแสดงรายการงาน ที่รันอยู่ ทั้งหมด
แต่ละงานที่ส่งโดย dsub จะได้รับชุดของค่าข้อมูลเมตาที่สามารถใช้สำหรับการระบุงานและการควบคุมงาน ข้อมูลเมตาที่เกี่ยวข้องกับแต่ละงานประกอบด้วย:
job-name
: ค่าเริ่มต้นเป็นชื่อไฟล์สคริปต์ของคุณหรือคำแรกของคำสั่งสคริปต์ของคุณ สามารถตั้งค่าได้อย่างชัดเจนด้วยพารามิเตอร์ --name
user-id
: ค่าตัวแปรสภาพแวดล้อม USER
job-id
: ตัวระบุงาน ซึ่งสามารถใช้ในการเรียกไปยัง dstat
และ ddel
สำหรับการตรวจสอบงานและการยกเลิกตามลำดับ ดูตัวระบุงานสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับรูปแบบ job-id
task-id
: หากส่งงานด้วยพารามิเตอร์ --tasks
แต่ละงานจะได้รับค่าตามลำดับของรูปแบบ "task -n " โดยที่ n มีค่าเป็น 1โปรดทราบว่าค่าข้อมูลเมตาของงานจะถูกแก้ไขเพื่อให้สอดคล้องกับ "ข้อจำกัดของฉลาก" ที่แสดงอยู่ในคู่มือการตรวจสอบสถานะและงานแก้ไขปัญหา
ข้อมูลเมตาสามารถใช้เพื่อยกเลิกงานหรืองานแต่ละงานภายในงานแบทช์ได้
สำหรับรายละเอียดเพิ่มเติม โปรดดูที่การตรวจสอบสถานะและงานการแก้ไขปัญหา
ตามค่าดีฟอลต์ dstat ส่งออกหนึ่งบรรทัดต่องาน หากคุณกำลังใช้งานแบบแบตช์กับงานจำนวนมาก คุณอาจได้รับประโยชน์จาก --summary
$ dstat --provider google-cls-v2 --project my-project --status '*' --summary
Job Name Status Task Count
------------- ------------- -------------
my-job-name RUNNING 2
my-job-name SUCCESS 1
ในโหมดนี้ dstat จะพิมพ์หนึ่งบรรทัดต่อคู่ (ชื่องาน สถานะงาน) คุณสามารถดูได้อย่างรวดเร็วว่ามีกี่งานที่เสร็จสิ้น มีงานที่ยังดำเนินการอยู่ และมีกี่งานที่ล้มเหลว/ยกเลิก
คำสั่ง ddel
จะลบงานที่รันอยู่
ตามค่าเริ่มต้น เฉพาะงานที่ส่งโดยผู้ใช้ปัจจุบันเท่านั้นที่จะถูกลบ ใช้แฟล็ก --users
เพื่อระบุผู้ใช้รายอื่น หรือใช้ '*'
สำหรับผู้ใช้ทั้งหมด
หากต้องการลบงานที่กำลังทำงานอยู่:
ddel --provider google-cls-v2 --project my-cloud-project --jobs job-id
หากงานเป็นงานแบตช์ งานที่รันอยู่ทั้งหมดจะถูกลบ
หากต้องการลบงานเฉพาะ:
ddel
--provider google-cls-v2
--project my-cloud-project
--jobs job-id
--tasks task-id1 task-id2
หากต้องการลบงานที่กำลังทำงานอยู่ทั้งหมดสำหรับผู้ใช้ปัจจุบัน:
ddel --provider google-cls-v2 --project my-cloud-project --jobs '*'
เมื่อคุณรันคำสั่ง dsub
ด้วยผู้ให้บริการ google-cls-v2
หรือ google-batch
จะมีชุดข้อมูลประจำตัวที่แตกต่างกันสองชุดที่ต้องพิจารณา:
pipelines.run()
เพื่อเรียกใช้คำสั่ง/สคริปต์ของคุณบน VM โดยทั่วไปแล้วบัญชีที่ใช้ในการส่งคำขอ pipelines.run()
จะเป็นข้อมูลประจำตัวผู้ใช้ปลายทางของคุณ คุณจะต้องตั้งค่านี้โดยการเรียกใช้:
gcloud auth application-default login
บัญชีที่ใช้ใน VM เป็นบัญชีบริการ ภาพด้านล่างแสดงให้เห็นสิ่งนี้:
โดยค่าเริ่มต้น dsub
จะใช้บัญชีบริการ Compute Engine เริ่มต้นเป็นบัญชีบริการที่ได้รับอนุญาตบนอินสแตนซ์ VM คุณสามารถเลือกที่จะระบุที่อยู่อีเมลของบัญชีบริการอื่นได้โดยใช้ --service-account
ตามค่าเริ่มต้น dsub
จะให้ขอบเขตการเข้าถึงต่อไปนี้แก่บัญชีบริการ:
นอกจากนี้ API จะเพิ่มขอบเขตนี้เสมอ:
คุณสามารถเลือกที่จะระบุขอบเขตโดยใช้ --scopes
แม้ว่าการใช้บัญชีบริการเริ่มต้นจะตรงไปตรงมา แต่บัญชีนี้ก็มีสิทธิ์การใช้งานกว้างๆ ที่ได้รับตามค่าเริ่มต้นเช่นกัน ปฏิบัติตามหลักการของสิทธิพิเศษน้อยที่สุด คุณอาจต้องการสร้างและใช้บัญชีบริการที่มีสิทธิ์อนุญาตเพียงพอเท่านั้นเพื่อเรียกใช้คำสั่ง/สคริปต์ dsub
ของคุณ
หากต้องการสร้างบัญชีบริการใหม่ ให้ทำตามขั้นตอนด้านล่าง:
ดำเนินการคำสั่ง gcloud iam service-accounts create
ที่อยู่อีเมลของบัญชีบริการจะเป็น [email protected]
gcloud iam service-accounts create "sa-name"
ให้สิทธิ์การเข้าถึง IAM บนบัคเก็ต ฯลฯ แก่บัญชีบริการ
gsutil iam ch serviceAccount:[email protected]:roles/storage.objectAdmin gs://bucket-name
อัปเดตคำสั่ง dsub
ของคุณเพื่อรวม --service-account
dsub
--service-account [email protected]
...
ดูตัวอย่าง:
ดูเอกสารเพิ่มเติมสำหรับ: