1. ã¯ããã« ã¯ã©ã€ãªé»åé¡åŸ®é¡ïŒCryo-EMïŒæè¡ã¯ã2017幎ã®ããŒãã«ååŠè³ãåè³ããæ§é çç©åŠãšåµè¬ç ç©¶ã«é©åœããããããŸãããç¹ã«æ§é ããŒã¹åµè¬ïŒStructure-Based Drug Design: SBDDïŒã«ãããŠãCryo-EMã¯æšçã¿ã³ãã¯è³ªã®äžæ¬¡å
æ§é ãååã¬ãã«ã§è§£æãããã®æ§é æ
å ±ãåºã«å¹æçãªååç©ããã¶ã€ã³ããäžã§äžå¯æ¬ ãªæè¡ãšãªã£ãŠããŸãã è¿å¹Žãè£œè¬æ¥çã§ã¯Cryo-EMã®å°å
¥ãæ¥éã«é²ãã§ããŸããåŸæ¥ã®ææ³ã§ã¯å°é£ã ã£ãèã¿ã³ãã¯è³ªãæè»ãªæ§é ãæã€æšçã«å¯ŸããŠããCryo-EMãæŽ»çšããåµè¬ç ç©¶ãäžçäžã§æšé²ãããŠããŸãããã®æè¡ã«ããããããŸã§ãåµè¬å°é£ããšãããŠããæšçã¿ã³ãã¯è³ªã«å¯Ÿããæ°è¬éçºã®å¯èœæ§ã倧ããåºãã£ãŠããŸãã ããããCryo-EMã«ãã£ãŠæ¯æ¥çæãããæ°ãã©ãã€ãã®ããŒã¿ãå¹ççã«åŠçããããšã¯ãç§åŠè
ãITã·ã¹ãã 管çè
ã«ãšã£ãŠå€§ããªèª²é¡ã§ãããããã®åŠçãã€ãã©ã€ã³ã«ã¯ãã¹ã±ãŒã©ãã«ã§å€æ§ãªã¯ãŒã¯ããŒãã«å¯Ÿå¿ã§ããã³ã³ãã¥ãŒãã£ã³ã°ç°å¢ãšãé«éãã€ã³ã¹ãå¹çã«åªããã¹ãã¬ãŒãžãå¿
èŠã§ãã 以åã®ããã°èšäº ã§ã¯ãAWS Parallel Computing Service (PCS) äžã§åçšãœãããŠã§ã¢ã§ããCryoSPARCã䜿çšããCryo-EMè§£æç°å¢ã玹ä»ããŸãããæ¬ããã°ã§ã¯ããªãŒãã³ãœãŒã¹ã®è§£æãœãããŠã§ã¢ã§ããRELIONã«çŠç¹ãåœãŠãŸããRELIONã¯äžçäžã®ç ç©¶è
ãèªç±ã«ããŠã³ããŒãããŠå©çšã§ããããã倧åŠãç ç©¶æ©é¢ã¯ãã¡ãããè§£æç°å¢ãæ°ãã«ç«ã¡äžãããçµç¹ã«ãšã£ãŠãå°å
¥ãããããœãããŠã§ã¢ã§ããPCSäžã§RELIONãåããããšã§ãSlurmããŒã¹ã®æ¢åã¯ãŒã¯ãããŒããã®ãŸãŸã¯ã©ãŠãã«æã¡èŸŒã¿ããªã³ããã³ãã§ã¹ã±ãŒã«ããè§£æç°å¢ãå®çŸã§ããŸãã æ¬ããã°ã§ã¯ãã»ããã¢ããæé ãããžã§ãå®è¡äŸãã³ã¹ãæé©åã®ãã€ã³ããŸã§ã解説ããŸãã 2. Cryo-EMè§£æãœãããŠã§ã¢ RELIONã®çŽ¹ä» 2.1 RELIONãšã¯äœã RELIONïŒREgularised LIkelihood OptimisatioNïŒã¯ãMedical Research Council (MRC)ã§éçºããããªãŒãã³ãœãŒã¹ã®ã¯ã©ã€ãªé»åé¡åŸ®é¡ç»åè§£æãœãããŠã§ã¢ã§ããäžçäžã®ç ç©¶æ©é¢ã§æ¡çšãããŠããã以äžã®ç¹åŸŽããããŸãïŒ å®å
šãªãŒãã³ãœãŒã¹ : åŠè¡çéææ§ãšçްãããã©ã¡ãŒã¿å¶åŸ¡ãå¯èœ GUI/CLIäž¡å¯Ÿå¿ : 察話çãªåŠçãšãããåŠçã®äž¡æ¹ããµããŒã RELION 5.0ã®äž»èŠæ©èœ : ææ°ã®ç»ååŠçã¢ã«ãŽãªãºã ãšé«éåæ©èœ 2.2 è§£æã¯ãŒã¯ãããŒæŠèŠ RELIONã®è§£æã¯ãŒã¯ãããŒã¯ã以äžã®äž»èŠãªã¹ãããã§æ§æãããŸãïŒ Motion CorrectionïŒåãè£æ£ïŒ : é»åé¡åŸ®é¡ã§æ®åãããåç»ã®åããè£æ£ CTF EstimationïŒã³ã³ãã©ã¹ãäŒé颿°æšå®ïŒ : æ®åçµæã®ããã©ãŒã«ã¹å€ãšéç¹åå·®ãæž¬å® Particle PickingïŒç²åéžæïŒ : è§£æå¯Ÿè±¡ãšãªãç²åãéžæ 2D/3D ClassificationïŒåé¡ïŒ : éžæããç²åãåé¡ 3D RefinementïŒç²Ÿå¯åïŒ : äžæ¬¡å
æ§é ã®ç²Ÿå¯å 2.3 RELIONã®åŠçã¹ãããããšã®CPU/GPUãªãœãŒã¹èŠæ±ã®åŸå RELIONã®ååŠçã¹ãããã¯ãèšç®ç¹æ§ãç°ãªããŸããé©åãªã€ã³ã¹ã¿ã³ã¹ã¿ã€ããéžæããããã«ãåŠçã¹ãããããšã®éããçè§£ããŠããããšãéèŠã«ãªããŸãã CPUäžå¿ã®åŠç ã¯äž»ã«ä»¥äžã®ãšããã§ãã Motion Correction : RELIONã®èªåå®è£
ïŒrelion_run_motioncorrïŒã¯CPUããŒã¹ã§åäœããŸãããã«ãã¹ã¬ããã§äžŠååãããŠãããåã¹ã¬ãããç¬ç«ããåç»ãã¬ãŒã ãåŠçããŸãããã ããå€éšããŒã«ã§ããMotionCor2ãMotionCor3çãåŒã³åºãå Žåã¯GPUåŠçãå¯èœã«ãªããŸãã CTF Estimation : CTFFIND-4.1ã䜿çšããCPUåŠçã§ããMPIã«ãã䞊ååã§è€æ°ã®ãã€ã¯ãã°ã©ããåæã«åŠçã§ããŸãã Particle Picking : LoGãã£ã«ã¿ããŒã¹ã®èªåãããã³ã°ã¯CPUåŠçã§å®è¡ãããŸãããã³ãã¬ãŒãããŒã¹ã®ãããã³ã°ã¯GPUã«ããé«éåãå¯èœã§ãã Bayesian Polishing : ç²åããšã®åãè£æ£ GPUäžå¿ã®åŠç ã¯äž»ã«ä»¥äžã®ãšããã§ãã RELION-2以éãæãèšç®è² è·ã®é«ãã¹ãããã«GPUã«ããé«éåãå°å
¥ãããŠããŸãïŒKimanius et al., eLife, 2016ïŒãGPUã«ããé«éå察象ã¯ä»¥äžã®éãã§ãïŒ 2D Classification : ç»ååé¡ã®Expectation-MaximizationïŒEMïŒã¢ã«ãŽãªãºã ã®E-stepãGPUäžã§å®è¡ãCPUã®ã¿ãšæ¯èŒããŠ10å以äžã®é«éåãå®çŸ 3D Classification : è€æ°ã®3Dã¯ã©ã¹ãåæã«ç²Ÿå¯åããåŠçãã¯ã©ã¹æ°ãå¢ããã»ã©GPUå éã®å¹æã倧ãããªããŸã 3D Auto-refine : é«è§£å床粟å¯åãããŒãªãšç©ºéã§ã®åç
§ãããã®æåœ±ãå·®åèšç®ãéæåœ±ãGPUäžã§äžŠåå®è¡ GPUå éã«ãã2D/3D Classificationãšé«è§£å床Refinementãé«éåãããŸãããããã«ãããåŸæ¥ã¯å€§èŠæš¡ã¯ã©ã¹ã¿ãŒãå¿
èŠã ã£ãèšç®ããGPUãæèŒããã€ã³ã¹ã¿ã³ã¹ã§çæéã«å®äºã§ããããã«ãªããŸããã 3. ã¢ãŒããã¯ãã£æŠèŠ 3.1 å
šäœæ§æ å³1 â AWSäžã®RELIONè§£æçšPCSã®ã¢ãŒããã¯ãã£æŠèŠãSlurmã³ã³ãããŒã©ã¯AWSãµãŒãã¹ã¢ã«ãŠã³ãã«é
眮ãããã³ã³ãã¥ãŒããšã¹ãã¬ãŒãžãªãœãŒã¹ã¯ãŠãŒã¶ãŒAWSã¢ã«ãŠã³ãã«é
眮ãããŸããã¯ã©ã¹ã¿ã«ã¯FSx for LustreãšAmazon Elastic File Store (EFS)ãããŠã³ããããŠããŸãã ãŠãŒã¶ãŒã¢ã¯ã»ã¹çµè·¯ãšããŠã¯ä»¥äžã®çµè·¯ã§ã¢ã¯ã»ã¹ããŸãã ãŠãŒã¶ãŒ â Amazon DCVïŒãã©ãŠã¶/ã¯ã©ã€ã¢ã³ãïŒâ Login Node â RELION GUIæäœã»ãžã§ãæå
¥ïŒCUIã§ãæå
¥å¯ïŒ ä»å玹ä»ããAWS PCS + RELIONã®ã¢ãŒããã¯ãã£ã¯ã以äžã®ã³ã³ããŒãã³ãã§æ§æãããŠããŸãã Amazon DCV : Login Nodeäžã®ãªã¢ãŒããã¹ã¯ãããæ¥ç¶ PCS Cluster : ãããŒãžãSlurmã³ã³ãããŒã©ãŒ Login Node : ãŠãŒã¶ãŒã¢ã¯ã»ã¹ãã€ã³ããDCVæ¥ç¶å
Compute Nodes : CPU/GPUã€ã³ã¹ã¿ã³ã¹ãèªåã¹ã±ãŒãªã³ã° Amazon FSx for Lustre : é«éå
±æã¹ãã¬ãŒãžïŒ/sharedïŒ Amazon EFS : ããŒã ãã£ã¬ã¯ããªïŒ/homeïŒ Amazon S3 : é·æä¿åãData Repository AssociationïŒDRAïŒé£æº 3.2 Amazon DCV Amazon DCVã¯ã髿§èœãªã¢ãŒããã£ã¹ãã¬ã€ãããã³ã«ã§ããã¯ã©ãŠãäžã®Linuxãã¹ã¯ãããã«ãã©ãŠã¶ããã€ãã£ãã¯ã©ã€ã¢ã³ãããäœé
å»¶ã§æ¥ç¶ã§ããŸãïŒ äœé
å»¶æ¥ç¶ : H.264ããŒã¹ã®ãšã³ã³ãŒãã£ã³ã°ãšãã¹ã¬ã¹å質ãããªå§çž® RELIONã®GUIæäœã«æé© : ãªã¢ãŒãç°å¢ã§ãããŒã«ã«ãšåçã®æäœæ è¿œå æéãªã : Amazon EC2äžã§ã®äœ¿çšã¯è¿œå ã©ã€ã»ã³ã¹è²»çšäžèŠ 3.3 AWS Parallel Computing Service (PCS) AWS PCSã¯ãã¯ã©ãŠãã§ãã€ããã©ãŒãã³ã¹ã³ã³ãã¥ãŒãã£ã³ã°ïŒHPCïŒã¯ã©ã¹ã¿ãå±éã»ç®¡çããããã®ãããŒãžããµãŒãã¹ã§ããäž»ãªå©ç¹ã¯ä»¥äžã®éãã§ãïŒ éçšè² è·ã®åæž : Slurmã³ã³ãããŒã©ãŒïŒslurmctldïŒã®ç®¡çãäžèŠ èªåã¹ã±ãŒãªã³ã° : ãžã§ãã«å¿ããèšç®ããŒãã®èªåèµ·åã»åæ¢ æ¢åã¯ãŒã¯ãããŒã®æŽ»çš : æ¢åã®Slurmã¹ã¯ãªããããã®ãŸãŸå©çšå¯èœ è¿
éãªç°å¢æ§ç¯ : çŽ30åã§èšç®ç°å¢ã®æºåãå®äºïŒæ ªåŒäŒç€Ÿ è±ç°äžå€®ç ç©¶æã® AWS re:Invent 2025ã§ã®çºè¡šäºäŸ ïŒ 3.4 RELIONã¯ãŒã¯ããŒãã«PCSãé©ããŠããçç± RELIONã®ãããªCryo-EMè§£æã¯ãŒã¯ããŒãã«ã¯ã以äžã®çç±ããPCSãé©ããŠãããšèããŸãã Slurmãšã®èŠªåæ§ : RELIONã¯GUIããSlurmã®sbatchã³ãã³ãã§ãžã§ããæå
¥ããèšèšã§ããPCSã¯ãã€ãã£ãã«SlurmããµããŒãããŠãããæ¢åã®Slurmã¹ã¯ãªãããã¯ãŒã¯ãããŒããã®ãŸãŸå©çšã§ããŸã éçšè² è·ã®æå°å : ç ç©¶è
ã¯ã€ã³ãã©ç®¡çã§ã¯ãªãè§£æã«éäžãã¹ãã§ããPCSã¯Slurmã³ã³ãããŒã©ãŒã®ç®¡çãAWSã«å§ä»»ã§ããParallelClusterãšæ¯èŒããŠéçšè² è·ã倧å¹
ã«åæžã§ããŸã ã³ã³ããåäžèŠ : AWS Batchã¯ã³ã³ããããŒã¹ã®ãããRELIONãäŸåã©ã€ãã©ãªïŒwxWidgetsãCTFFINDçïŒã®ã³ã³ããåãå¿
èŠã§ããPCSã§ã¯AMIã«ãœãããŠã§ã¢ãäºåã€ã³ã¹ããŒã«ããã ãã§æžã¿ãŸã GUIæäœãšã®çžæ§ : Amazon DCVãšçµã¿åãããGUIæäœã¯ãPCSã®ãã°ã€ã³ããŒãããçŽæ¥è¡ããŸã AWS ParallelClusterãšPCSã®æ¯èŒã¯ãAWSããã°èšäºã Whatâs the difference between AWS ParallelCluster and AWS Parallel Computing Service? ããåèã«ãªããŸãã 3.5 ã¹ãã¬ãŒãžæŠç¥ å¹ççãªããŒã¿ç®¡çã®ããã以äžã®ã¹ãã¬ãŒãžæ§æãšããŠããŸãã FSx for Lustre : RELIONäœæ¥ãã£ã¬ã¯ããªãS3 DRA飿ºã«ããé«éã¢ã¯ã»ã¹ Amazon EFS : ããŒã ãã£ã¬ã¯ããªããœãããŠã§ã¢ã€ã³ã¹ããŒã« Amazon S3 : çããŒã¿ä¿åãåŠççµæã®é·æä¿åãã©ã€ããµã€ã¯ã«ç®¡ç 3.6 S3ãšFSx Lustreã®Data Repository Association (DRA) Data Repository Association (DRA)ã¯ãAmazon S3ãšFSx for Lustreã飿ºããã匷åãªæ©èœã§ããRELIONã¯ãŒã¯ããŒãã«ãããŠãã³ã¹ãå¹çãšæ§èœãäž¡ç«ãããéµãšãªããŸãã DRAã®ä»çµã¿ïŒ DRAã¯ãS3ãã±ãããšFSx Lustreãã¡ã€ã«ã·ã¹ãã éã«åæ¹åã®ããŒã¿åæã確ç«ããŸãã1ã€ã®FSx Lustreãã¡ã€ã«ã·ã¹ãã ã«æå€§8ã€ã®DRAãäœæã§ããããããç°ãªãS3ãã±ãããŸãã¯ãã¬ãã£ãã¯ã¹ã«ãªã³ã¯ã§ããŸãã èªåã€ã³ããŒãæ©èœïŒ èªåã€ã³ããŒãã¯ãS3ãã±ããå
ã®ãªããžã§ã¯ãã®å€æŽãèªåçã«FSx Lustreã«åæ ããŸãïŒ New : S3ã«æ°ãããªããžã§ã¯ãã远å ããããšãã«ã¡ã¿ããŒã¿ãã€ã³ããŒã Changed : æ¢åã®S3ãªããžã§ã¯ãã倿Žããããšãã«ã¡ã¿ããŒã¿ãæŽæ° Deleted : S3ãªããžã§ã¯ããåé€ããããšãã«ãã¡ã€ã«ã·ã¹ãã ããåé€ æšå¥šèšå®ã¯ãNew + Changed + Deletedã®çµã¿åããã§ããããã«ãããS3ãšFSx Lustreéã§å®å
šãªåæãç¶æãããŸãã èªåãšã¯ã¹ããŒãæ©èœïŒ èªåãšã¯ã¹ããŒãã¯ãFSx Lustreäžã®ãã¡ã€ã«å€æŽãèªåçã«S3ã«ãšã¯ã¹ããŒãããŸãïŒ ãã¡ã€ã«ãäœæã倿Žãåé€ããããšèªåçã«S3ã«åæ ãã¡ã€ã«ã³ã³ãã³ãã®å€æŽã¯ããã¡ã€ã«ãéããåŸã«ãšã¯ã¹ããŒã Amazon CloudWatch Logsã§ãšã¯ã¹ããŒã倱æãç£èŠå¯èœ DRAã«ã€ããŠã¯ãã¡ãã® ãŠãŒã¶ã¬ã€ã ãã確èªãã ããã 4. ã»ããã¢ãããšæ§ç¯æé æ¬æé ã§ã¯ãDLAMI + EC2 ImageBuilderæ¹åŒã§PCSçšã«ã¹ã¿ã AMIãäœæããRELIONç°å¢ãæ§ç¯ããŸãããã®æé 㯠AWS HPC Recipesã§ç޹ä»ãããŠããæé ã§ãããã®æ¹æ³ã«ãã以äžã®å¹çåãå³ããŸãã NVIDIAãã©ã€ããŒ/CUDAãAMIã«äºåã€ã³ã¹ããŒã«æžã¿ DCVãLogin Nodeã®UserDataã«å«ãŸãããããåèµ·åæã«ãDCVæ§æãç¶æããã FFTWãLaunchTemplateã§ã€ã³ã¹ã¿ã³ã¹èµ·åæã«ã€ã³ã¹ããŒã«ããã OS: Amazon Linux 2023ïŒAmazon Linux2023㯠2029幎6æ30æ¥ãŸã§ãµããŒããããŸã ïŒ å
šããŒãïŒGPU LoginãGPU ComputeãCPU ComputeïŒã§åäžAMIã䜿çšã§ãã æé ã®å®è¡ã«åœãã£ãŠã¯ä»¥äžã®åææ¡ä»¶ãèžãŸããŠå®è¡ããŠãã ããã PCSããããã€ã§ããAWSã¢ã«ãŠã³ããæã£ãŠããããšïŒäœ¿ããªãŒãžã§ã³ã¯us-east-2ãªãŒãžã§ã³ãšããïŒ EC2ã®SSHããŒãã¢ãäœææžã¿ã§ããããšïŒãããã€å¯Ÿè±¡ãšãªããªãŒãžã§ã³ã®us-east-2ã«äœææžã¿ãšããïŒ ããŒã«ã«ã®PCã«AWS CLI v2 ãã€ã³ã¹ããŒã«æžã¿ã§ããããš 4.1 DLAMI ImageBuilderã§ã«ã¹ã¿ã AMIäœæ 4.1.1 ImageBuilderã¹ã¿ãã¯ã®ããã〠HPC Recipes for AWSã® DLAMI for PCS ã¬ã·ãã䜿çšããŠãImageBuilderãã€ãã©ã€ã³ããããã€ããŸããããã§ã¯AWS CloudFormationã䜿ã£ãŠãããã€ããŸãã aws cloudformation create-stack \ --region us-east-2 \ --capabilities CAPABILITY_IAM \ --stack-name dlami-for-pcs \ --template-url https://aws-hpc-recipes.s3.us-east-1.amazonaws.com/main/recipes/pcs/dlami_for_pcs_imagebuilder/assets/dlami-for-pcs.yaml \ --parameters \ ParameterKey=BuildSchedule,ParameterValue=Manual \ ParameterKey=PublishToSsm,ParameterValue=true \ ParameterKey=SsmParameterPrefix,ParameterValue=/dlami-for-pcs # å®äºåŸ
æ©ïŒçŽ5-10åïŒ aws cloudformation wait stack-create-complete --stack-name dlami-for-pcs --region us-east-2 4.1.2 AMIãã«ãã®å®è¡ AmazonLinux2023ã®ã€ã¡ãŒãžãäœæå¯èœãªAL2023 x86_64ãã€ãã©ã€ã³ãå®è¡ããŸãã # ãã€ãã©ã€ã³ARNãååŸ PIPELINE_ARN=$(aws cloudformation describe-stacks \ --region us-east-2 \ --stack-name dlami-for-pcs \ --query "Stacks[0].Outputs[?OutputKey=='PipelineAl2023X8664Arn'].OutputValue" \ --output text) # ãã«ãéå§ïŒçŽ25åçšåºŠæéãããããŸãïŒ aws imagebuilder start-image-pipeline-execution \ --image-pipeline-arn ${PIPELINE_ARN} \ --region us-east-2 4.1.3 ãã«ãæžã¿AMI IDã®ååŸ # ãã«ãå®äºåŸãAMI IDãååŸ DLAMI_AMI_ID=$(aws ec2 describe-images \ --owners self \ --filters "Name=name,Values=dlami-for-pcs-base-al2023-x86_64*" \ --query 'reverse(sort_by(Images, &CreationDate))[0].ImageId' \ --output text --region us-east-2) echo "DLAMI AMI ID: ${DLAMI_AMI_ID}" ãã®AMIã«ã¯ä»¥äžãäºåã€ã³ã¹ããŒã«ãããŠããŸãïŒ NVIDIAãã©ã€ã㌠+ CUDAïŒDLAMIããŒã¹ïŒ AWS PCS Agent Slurm 24.11 + 25.05ïŒPATHã¯Slurm 25.05ãåªå
ããããLaunchTemplateã®èšå®ç®æã§æå®ïŒ EFS Utils CloudWatch Agent AWS System Manager AgentïŒSSM AgentïŒ 4.2 PCSã¯ã©ã¹ã¿ãŒã®äœæ HPC Recipes for AWSã® Getting Started ãã³ãã¬ãŒãã䜿çšããŠãPCSã¯ã©ã¹ã¿ãŒã®åºç€ããããã€ããŸããäžèšãã³ãã¬ãŒãã¯ãVPCããµãããããEFSãFSx for LustreãPCS ClusterãIAMãSecurity Groupsãªã©ã®åºç€ãªãœãŒã¹ãäžæ¬äœæããŸããããã©ã«ãèšå®ã§ã¯ãã¢çšã®Login NodeïŒc6i.xlargeïŒãšCompute NodeïŒc6i.xlargeãdemoãã¥ãŒïŒãäœæãããŸãããä»åäœæããRELIONç°å¢ã§ã¯GPUä»ãã®Login NodeãšGPU/CPUã³ã³ãã¥ãŒãããŒããäœæããŸããæ¬¡ã®ã¹ãããã§ãRELIONåãã«ããŒãã°ã«ãŒããšãã¥ãŒã远å ã§äœæããŸãã AWS PCSã¯ãããŒãžãã³ã³ãœãŒã«ã§ããã©ã¬ã«ã³ã³ãã¥ãŒãã£ã³ã°ãµãŒãã¹ããšãããµãŒãã¹åã§ç»é¢ã«ã¢ã¯ã»ã¹ã§ããŸãã 4.2.1 ã³ã³ãœãŒã«ããã®ãããã€ããå ŽåïŒã¯ã³ã¯ãªãã¯ïŒ Launch Stack (us-east-2) ãã©ã¡ãŒã¿èšå®ïŒ SlurmVersion : 25.05 ïŒææ°ã®ãµããŒãããŒãžã§ã³ãæšå¥šã24.11ã¯2026幎5æ31æ¥ã«EOLã ãµããŒãããŒãžã§ã³äžèЧ ãåç
§ïŒ ManagedAccounting : enabled ïŒSlurm Accountingãæå¹åã sacct ã³ãã³ãã§ãžã§ãå±¥æŽã»ãªãœãŒã¹äœ¿çšéã確èªã§ãããã©ãã«ã·ã¥ãŒãã£ã³ã°ãã³ã¹ãåæã«æçšã§ãïŒ NodeArchitecture : x86 KeyName : äºåã«äœæããSSHããŒãã¢å( my-keypair ) ClientIpCidr : ãå©çšãããŠããç°å¢äžã§ã®ã¯ã©ã€ã¢ã³ãåŽã®ãããªãã¯IPïŒ aa.bb.cc.dd/32 ïŒ æ©èœãšå€æç®æã§ããã§ãã¯ãå
¥ããŠããã¹ã¿ãã¯ã®äœæããã¯ãªãã¯ãããšCloudFormationããããã€ãããŸãã 4.2.2 AWS CLIãããããã€ããå Žå YOUR_KEY_NAMEã«äºåã«äœæããSSHããŒãã¢åã代å
¥ããŠãã ãããYOUR_IPã«ã¯ClientIpCidrãšåãã¯ã©ã€ã¢ã³ãåŽã®ãããªãã¯IPãæå®ããŠãã ããã export YOUR_KEY_NAME="my-keypair" export YOUR_IP="aa.bb.cc.dd" aws cloudformation create-stack \ --stack-name pcs-relion \ --template-url https://aws-hpc-recipes.s3.us-east-1.amazonaws.com/main/recipes/pcs/getting_started/assets/cluster.yaml \ --parameters \ ParameterKey=SlurmVersion,ParameterValue=25.05 \ ParameterKey=ManagedAccounting,ParameterValue=enabled \ ParameterKey=NodeArchitecture,ParameterValue=x86 \ ParameterKey=KeyName,ParameterValue=${YOUR_KEY_NAME} \ ParameterKey=ClientIpCidr,ParameterValue=${YOUR_IP}/32 \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \ --region us-east-2 # å®äºåŸ
æ©ïŒçŽ25åïŒ aws cloudformation wait stack-create-complete --stack-name pcs-relion --region us-east-2 4.2.3 CloudFormationåºåå€ã®ååŸïŒAWS CLIã䜿çšïŒ ãããã€ãããCloudFormationã®ã¹ã¿ãã¯ãäœæå®äºããåŸã以éã®æé ã§äœ¿çšãããªãœãŒã¹IDãååŸããŸããCloudFormationã³ã³ãœãŒã«ã®ãåºåãã¿ãã§ã確èªã§ããŸããã以äžã®AWS CLIã§ç¢ºèªãã§ããŸããããšã®ã³ãã³ãå®è¡ã®ãã©ã¡ãŒã¿ãšããŠãããã§èšå®ãã倿°ãå©çšããŸãã以éã®åŠçãè¡ãå Žåã¯AWS CLIã§ã³ãã³ããå®è¡ããŠãã ããã # PCSã¯ã©ã¹ã¿ãŒID CLUSTER_ID=$(aws cloudformation describe-stacks --stack-name pcs-relion \ --query "Stacks[0].Outputs[?OutputKey=='ClusterId'].OutputValue" \ --output text --region us-east-2) # ãã¹ãã¹ã¿ãã¯ãããªãœãŒã¹IDãååŸãããã«ããŒé¢æ° get_nested_output() { local nested_id=$(aws cloudformation describe-stack-resource \ --stack-name pcs-relion --logical-resource-id "$1" \ --query "StackResourceDetail.PhysicalResourceId" \ --output text --region us-east-2) aws cloudformation describe-stacks --stack-name "$nested_id" \ --query "Stacks[0].Outputs[?OutputKey=='$2'].OutputValue" \ --output text --region us-east-2 } # åãªãœãŒã¹ID VPC_ID=$(get_nested_output "Networking" "VPC") PUBLIC_SUBNET_ID=$(get_nested_output "Networking" "DefaultPublicSubnet") PRIVATE_SUBNET_ID=$(get_nested_output "Networking" "DefaultPrivateSubnet") EFS_ID=$(get_nested_output "EfsStorage" "EFSFilesystemId") FSX_ID=$(get_nested_output "FSxLStorage" "FSxLustreFilesystemId") FSX_MOUNT_NAME=$(get_nested_output "FSxLStorage" "FSxLustreMountName") CLUSTER_SG_ID=$(get_nested_output "PCSSecurityGroup" "ClusterSecurityGroupId") SSH_SG_ID=$(get_nested_output "PCSSecurityGroup" "InboundSshSecurityGroupId") INSTANCE_PROFILE_ARN=$(get_nested_output "PCSInstanceProfile" "InstanceProfileArn") COMPUTE_LT_ID=$(get_nested_output "PCSLaunchTemplate" "ComputeLaunchTemplateId") LOGIN_LT_ID=$(get_nested_output "PCSLaunchTemplate" "LoginLaunchTemplateId") # VPCããã©ã«ãSG VPC_DEFAULT_SG=$(aws ec2 describe-security-groups \ --filters "Name=vpc-id,Values=${VPC_ID}" "Name=group-name,Values=default" \ --query "SecurityGroups[0].GroupId" --output text --region us-east-2) # EFS/FSx SGïŒãã¹ãã¹ã¿ãã¯ããååŸïŒ EFS_SG=$(get_nested_output "EfsStorage" "SecurityGroupId") FSX_SG=$(get_nested_output "FSxLStorage" "FSxLustreSecurityGroupId") echo "CLUSTER_ID=${CLUSTER_ID}" echo "PUBLIC_SUBNET_ID=${PUBLIC_SUBNET_ID}" echo "PRIVATE_SUBNET_ID=${PRIVATE_SUBNET_ID}" echo "EFS_ID=${EFS_ID}" echo "FSX_ID=${FSX_ID}" echo "FSX_MOUNT_NAME=${FSX_MOUNT_NAME}" 4.3 GPU Login Node + GPU/CPUã³ã³ãã¥ãŒãããŒãã°ã«ãŒãã®è¿œå Getting Started ãã³ãã¬ãŒãã§äœæãããããã©ã«ãã®Login NodeïŒc6i.xlargeïŒãšCompute NodeïŒc6i.xlargeã demo ãã¥ãŒïŒãšã¯å¥ã«RELIONã®å®è¡ç°å¢ã«é©ããGPUãæèŒããLoginNodeãCPUãšGPUã®ComputeNodeãäœæããŸãã Login NodeïŒGPUïŒ : g6.xlargeïŒL4 GPUæèŒãDCVãGPU察å¿ã§çšŒå + RELION GPUãã«ãã§çšããïŒ GPU Compute Node : g6e.4xlargeïŒL40S GPUã gpu-queue ã2D/3D Classificationçã®GPUåŠççšïŒ CPU Compute Node : c7i.4xlargeïŒ cpu-queue ãMotion CorrectionãCTF Estimationçã®CPUåŠççšïŒ ããã©ã«ãã® login ã compute-1 ããŒãã°ã«ãŒããš demo ãã¥ãŒã¯åé€ Launch Templateã®äœæ ComputeçšUserDataïŒGPU/CPUå
±éïŒ DLAMIã«ã¯NVIDIAãã©ã€ããŒ/CUDAãäºåã€ã³ã¹ããŒã«æžã¿ã®ãããUserDataã§èšå®ãããã®ã¯EFS/FSxã®ããŠã³ããšFFTWãlustre-clientã®ããã±ãŒãžã®ã€ã³ã¹ããŒã«ã«ãªããŸãã cat > compute-userdata.txt <<EOF MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 packages: - amazon-efs-utils - lustre-client - fftw - fftw-libs - fftw-devel - ghostscript runcmd: - mkdir -p /tmp/home - rsync -aA /home/ /tmp/home - echo "${EFS_ID}:/ /home efs tls,_netdev" >> /etc/fstab - mount -a -t efs defaults - rsync -aA --ignore-existing /tmp/home/ /home - rm -rf /tmp/home/ - mkdir -p /shared - chmod a+rwx /shared - mount -t lustre ${FSX_ID}.fsx.us-east-2.amazonaws.com@tcp:/${FSX_MOUNT_NAME} /shared - chmod 777 /shared - echo 'export PATH=/opt/aws/pcs/scheduler/slurm-25.05/bin:$PATH' > /etc/profile.d/slurm-version.sh --==MYBOUNDARY== EOF Login GPUçšUserDataïŒDCVå«ãïŒ Login Nodeã®UserDataã«ã¯DCVã€ã³ã¹ããŒã«ãå«ããŸããããã«ãããã°ã€ã³ããŒãåèµ·åæã«ãDCVãç¶æãããŸãã cat > login-gpu-userdata.txt <<EOF MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 packages: - amazon-efs-utils - lustre-client - fftw - fftw-libs - fftw-devel - cmake - git - wget - environment-modules - libtiff-devel - libpng-devel - gtk3-devel - mesa-libGL-devel - mesa-libGLU-devel - libXft-devel - libX11-devel - ghostscript runcmd: # Development Tools group install - dnf groupinstall -y "Development Tools" # EFS/FSx mount - mkdir -p /tmp/home - rsync -aA /home/ /tmp/home - echo "${EFS_ID}:/ /home efs tls,_netdev" >> /etc/fstab - mount -a -t efs defaults - rsync -aA --ignore-existing /tmp/home/ /home - rm -rf /tmp/home/ - mkdir -p /shared - chmod a+rwx /shared - mount -t lustre ${FSX_ID}.fsx.us-east-2.amazonaws.com@tcp:/${FSX_MOUNT_NAME} /shared - chmod 777 /shared # Slurm 25.05 PATH priority - echo 'export PATH=/opt/amazon/openmpi/bin:/opt/aws/pcs/scheduler/slurm-25.05/bin:$PATH' > /etc/profile.d/slurm-version.sh - echo 'export LD_LIBRARY_PATH=/opt/amazon/openmpi/lib64:${LD_LIBRARY_PATH:-}' >> /etc/profile.d/slurm-version.sh # Software directory setup - mkdir -p /home/software/apps /home/software/src /home/software/modulefiles - chown -R ec2-user:ec2-user /home/software # DCV installation (AL2023) - dnf groupinstall -y "Desktop" - dnf install -y glx-utils - systemctl set-default graphical.target # Waylandç¡å¹åïŒX11ã¢ãŒãã«åŒ·å¶ïŒ - sed -i '/\[daemon\]/a WaylandEnable=false' /etc/gdm/custom.conf # NVIDIA Xorgèšå®ïŒGPUã¬ã³ããªã³ã°æå¹åïŒ - nvidia-xconfig --preserve-busid --enable-all-gpus # DCV ããã±ãŒãžã€ã³ã¹ããŒã« - rpm --import https://d1uj6qtbmh3dt5.cloudfront.net/NICE-GPG-KEY - cd /tmp && wget -q https://d1uj6qtbmh3dt5.cloudfront.net/nice-dcv-el9-x86_64.tgz && tar -xzf nice-dcv-el9-x86_64.tgz && cd nice-dcv-*-el9-x86_64 && dnf install -y nice-dcv-server-*.rpm nice-dcv-web-viewer-*.rpm nice-xdcv-*.rpm - | cat > /etc/dcv/dcv.conf << 'DCVCONF' [session-management] create-session = true [session-management/automatic-console-session] owner = "ec2-user" [display] target-fps = 30 [connectivity] enable-quic-frontend = true idle-timeout = 0 [security] authentication = "system" DCVCONF - echo "ec2-user:dcvpassword" | chpasswd # Skip Initial GNOME setup - mkdir -p /home/ec2-user/.config - echo 'yes' > /home/ec2-user/.config/gnome-initial-setup-done - chown -R ec2-user:ec2-user /home/ec2-user/.config - systemctl enable gdm && systemctl start gdm - systemctl enable dcvserver && systemctl restart dcvserver --==MYBOUNDARY== EOF ec2-userã®ãã¹ã¯ãŒãã¯æ€èšŒçšã«ç°¡åãªãã®ãä»ããŠããŸããã䜿ãã«ãªãç°å¢æ¡ä»¶ãèæ
®é ããå¿
èŠã«å¿ããŠåŒ·åºãªãã¹ã¯ãŒãã«å€æŽããŠãã ããã Launch Templateäœæ # ComputeçšUserDataããã¡ã€ã«ã«ä¿åããŠBase64ãšã³ã³ãŒã COMPUTE_USERDATA_B64=$(cat compute-userdata.txt | base64) # Login GPUçšUserDataããã¡ã€ã«ã«ä¿åããŠBase64ãšã³ã³ãŒã LOGIN_USERDATA_B64=$(cat login-gpu-userdata.txt | base64) # Compute Launch TemplateïŒGPU/CPUå
±éãPrivate SubnetçšïŒ COMPUTE_LT_ID=$(aws ec2 create-launch-template \ --launch-template-name "compute-dlami-pcs-relion" \ --launch-template-data "{ \"TagSpecifications\": [{\"ResourceType\": \"instance\", \"Tags\": [{\"Key\": \"HPCRecipes\", \"Value\": \"true\"}]}], \"MetadataOptions\": {\"HttpEndpoint\": \"enabled\", \"HttpPutResponseHopLimit\": 4, \"HttpTokens\": \"required\"}, \"SecurityGroupIds\": [\"${VPC_DEFAULT_SG}\", \"${CLUSTER_SG_ID}\", \"${EFS_SG}\", \"${FSX_SG}\"], \"UserData\": \"${COMPUTE_USERDATA_B64}\" }" \ --query "LaunchTemplate.LaunchTemplateId" \ --output text --region us-east-2) # Login GPU Launch TemplateïŒPublic SubnetçšãSSH SG + KeyName + DCVä»ãïŒ LOGIN_LT_ID=$(aws ec2 create-launch-template \ --launch-template-name "login-gpu-dlami-pcs-relion" \ --launch-template-data "{ \"TagSpecifications\": [{\"ResourceType\": \"instance\", \"Tags\": [{\"Key\": \"HPCRecipes\", \"Value\": \"true\"}]}], \"MetadataOptions\": {\"HttpEndpoint\": \"enabled\", \"HttpPutResponseHopLimit\": 4, \"HttpTokens\": \"required\"}, \"KeyName\": \"${YOUR_KEY_NAME}\", \"SecurityGroupIds\": [\"${VPC_DEFAULT_SG}\", \"${CLUSTER_SG_ID}\", \"${SSH_SG_ID}\", \"${EFS_SG}\", \"${FSX_SG}\"], \"UserData\": \"${LOGIN_USERDATA_B64}\" }" \ --query "LaunchTemplate.LaunchTemplateId" \ --output text --region us-east-2) ${YOUR_KEY_NAME} ã¯ç»é²æžã¿ã®ããŒãã¢åãæå®ããŠãã ããã NodeGroup + ãã¥ãŒäœæ å
šããŒãã§DLAMI AMIïŒ ${DLAMI_AMI_ID} ïŒã䜿çšããŸãã # GPU Login NodeGroup (g6.xlarge) aws pcs create-compute-node-group \ --cluster-identifier ${CLUSTER_ID} \ --compute-node-group-name login-gpu \ --ami-id ${DLAMI_AMI_ID} \ --subnet-ids ${PUBLIC_SUBNET_ID} \ --iam-instance-profile-arn ${INSTANCE_PROFILE_ARN} \ --scaling-configuration "minInstanceCount=1,maxInstanceCount=1" \ --instance-configs '[{"instanceType":"g6.xlarge"}]' \ --custom-launch-template "id=${LOGIN_LT_ID},version=1" \ --region us-east-2 # login-gpuã®NodeGroupãACTIVEã«ãªããŸã§åŸ
æ© # GPU Compute NodeGroup (g6e.4xlarge) aws pcs create-compute-node-group \ --cluster-identifier ${CLUSTER_ID} \ --compute-node-group-name gpu-nodes \ --ami-id ${DLAMI_AMI_ID} \ --subnet-ids ${PRIVATE_SUBNET_ID} \ --iam-instance-profile-arn ${INSTANCE_PROFILE_ARN} \ --scaling-configuration "minInstanceCount=0,maxInstanceCount=4" \ --instance-configs '[{"instanceType":"g6e.4xlarge"}]' \ --custom-launch-template "id=${COMPUTE_LT_ID},version=1" \ --region us-east-2 # CPU Compute NodeGroup (c7i.4xlarge) - åãDLAMI AMI + åãCompute LT aws pcs create-compute-node-group \ --cluster-identifier ${CLUSTER_ID} \ --compute-node-group-name cpu-nodes \ --ami-id ${DLAMI_AMI_ID} \ --subnet-ids ${PRIVATE_SUBNET_ID} \ --iam-instance-profile-arn ${INSTANCE_PROFILE_ARN} \ --scaling-configuration "minInstanceCount=0,maxInstanceCount=4" \ --instance-configs '[{"instanceType":"c7i.4xlarge"}]' \ --custom-launch-template "id=${COMPUTE_LT_ID},version=1" \ --region us-east-2 # gpu-nodesãšcpu-nodesã®NodeGroupãACTIVEã«ãªããŸã§åŸ
æ© # äœæããNodeGroupã®IDãååŸ GPU_NG_ID=$(aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[?name=='gpu-nodes'].id" --output text --region us-east-2) CPU_NG_ID=$(aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[?name=='cpu-nodes'].id" --output text --region us-east-2) # ãã¥ãŒäœæ aws pcs create-queue --cluster-identifier ${CLUSTER_ID} --queue-name gpu-queue \ --compute-node-group-configurations "[{\"computeNodeGroupId\":\"${GPU_NG_ID}\"}]" --region us-east-2 aws pcs create-queue --cluster-identifier ${CLUSTER_ID} --queue-name cpu-queue \ --compute-node-group-configurations "[{\"computeNodeGroupId\":\"${CPU_NG_ID}\"}]" --region us-east-2 gpu-queueãšcpu-queueãã¥ãŒãã¢ã¯ãã£ãã«ãªããŸã§å°ãåŸ
ã¡ãŸãã ïŒãªãã·ã§ã³ïŒããã©ã«ããªãœãŒã¹ã®åé€ RELIONå®è¡çšã«æ°ããNodeGroupãšãã¥ãŒãäœæã§ããã®ã¡ã«ãGetting Started Templateã§äœæãããããã©ã«ããªãœãŒã¹ã¯ä»åäžèŠãšãªãã®ã§ãªãœãŒã¹ãåé€ããŸããæ¬æé ã®å®è¡ã¯ãªãã·ã§ã³ã§ãã # ããã©ã«ããªãœãŒã¹ã®IDååŸ DEMO_QUEUE_ID=$(aws pcs list-queues --cluster-identifier ${CLUSTER_ID} \ --query "queues[?name=='demo'].id" --output text --region us-east-2) COMPUTE1_NG_ID=$(aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[?name=='compute-1'].id" --output text --region us-east-2) OLD_LOGIN_NG_ID=$(aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[?name=='login'].id" --output text --region us-east-2) # demoãã¥ãŒåé€ïŒãã¥ãŒãå
ã«åé€ããŠããNodeGroupãåé€ããŸãïŒ aws pcs delete-queue --cluster-identifier ${CLUSTER_ID} \ --queue-identifier ${DEMO_QUEUE_ID} --region us-east-2 # demoãã¥ãŒãåé€ããããŸã§å°ãåŸ
ã£ãŠãã以äžãå®è¡ããŠãã ããã # compute-1ã³ã³ãã¥ãŒãããŒãã°ã«ãŒãåé€ aws pcs delete-compute-node-group --cluster-identifier ${CLUSTER_ID} \ --compute-node-group-identifier ${COMPUTE1_NG_ID} --region us-east-2 # loginã³ã³ãã¥ãŒãããŒãã°ã«ãŒãåé€ aws pcs delete-compute-node-group --cluster-identifier ${CLUSTER_ID} \ --compute-node-group-identifier ${OLD_LOGIN_NG_ID} --region us-east-2 # åé€ç¢ºèªïŒlogin-gpu, cpu-nodes, gpu-nodes ã®3ã€ã ãæ®ã£ãŠããã°OKïŒ aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[].name" --output text --region us-east-2 4.4 Amazon DCVã®ã»ãã¥ãªãã£ã°ã«ãŒãèšå® ã»ãã¥ãªãã£ã°ã«ãŒãã«DCVããŒãã远å ããŸãïŒTCP + UDPãUDPã¯QUICãããã³ã«ã«ããäœé
å»¶ã¹ããªãŒãã³ã°ã«äœ¿çšããŸãïŒã ${YOUR_IP}/32 ã¯ã¯ã©ã¹ã¿ãŒäœææã«æå®ããClientIpCidrãšåããããªãã¯IPã䜿çšããŠãã ããïŒ aws ec2 authorize-security-group-ingress --group-id ${SSH_SG_ID} \ --protocol tcp --port 8443 --cidr ${YOUR_IP}/32 --region us-east-2 aws ec2 authorize-security-group-ingress --group-id ${SSH_SG_ID} \ --protocol udp --port 8443 --cidr ${YOUR_IP}/32 --region us-east-2 DCVãžã®ã¢ã¯ã»ã¹ç¢ºèª ãã©ãŠã¶ã§ https://<LOGIN_GPU_NODE_IP>ïŒlogin-gpuã§äœæããã€ã³ã¹ã¿ã³ã¹ã«ä»äžãããŠããã°ããŒãã«ã¢ãã¬ã¹ïŒ:8443 ã«ã¢ã¯ã»ã¹ãã ec2-user / dcvpassword ã§DCVã«ãã°ã€ã³ãã§ããã確èªãããŠãã ããããã©ãŠã¶äžèšŒææžã®èŠåã衚瀺ãããŸããã確èªãããªããã¢ã¯ã»ã¹ãé²ããŠãã ããã 4.5 RELIONãšäŸåã©ã€ãã©ãªã®ã€ã³ã¹ããŒã« RELIONã®ãã«ãã«ã¯PCS AMIã«ããªã€ã³ã¹ããŒã«ãããOpenMPIïŒ/opt/amazon/openmpi/ïŒã䜿çšããŸãã # LOGIN NODEã«SSHã§ãã°ã€ã³ããŸãã ssh -i "${YOUR_KEY_NAME}ã眮ãããŠãã絶察ãã¹" ec2-user@${LOGIN_NODE_IP} # wxWidgets 3.2.5ïŒCTFFINDçšããã«ãã«9å匱æéãæããïŒ cd /home/software/src wget https://github.com/wxWidgets/wxWidgets/releases/download/v3.2.5/wxWidgets-3.2.5.tar.bz2 tar -xjf wxWidgets-3.2.5.tar.bz2 && cd wxWidgets-3.2.5 cd build ../configure --prefix=/home/software/apps/wxWidgets-3.2.5 --with-gtk=3 --enable-unicode --disable-shared make -j$(nproc) && make install # CTFFIND 4.1.14 cd /home/software/src wget https://grigoriefflab.umassmed.edu/sites/default/files/ctffind-4.1.14.tar.gz -O ctffind-4.1.14.tar.gz tar -xzf ctffind-4.1.14.tar.gz && cd ctffind-4.1.14 # CTFFIND 4.1.14ã§ã¯ãœãŒã¹ã®äžéšã§boolåã§å®£èšãããŠããã«ããããããreturnæããªãã # C++ã®æªå®çŸ©åäœã«ããSegmentation FaultãçºçããŸãã # ãã®åé¡ã¯CTFFINDéçºè
ãã©ãŒã©ã ã§å ±åãããéçºçã§ã¯ä¿®æ£æžã¿ã§ããããšã確èªãããŠããŸãã # åç
§: https://grigoriefflab.umassmed.edu/forum/software/ctffind_ctftilt/ctffind_4114_segfault sed -i 's/^bool ComputeRotationalAverageOfPowerSpectrum/void ComputeRotationalAverageOfPowerSpectrum/' src/programs/ctffind/ctffind.cpp sed -i 's/^bool RescaleSpectrumAndRotationalAverage/void RescaleSpectrumAndRotationalAverage/' src/programs/ctffind/ctffind.cpp # ãã«ãïŒOpenMPæå¹åãæå®ããã«ãã«1å匱æéãæããïŒ mkdir build && cd build ../configure --prefix=/home/software/apps/ctffind-4.1.14 \ --with-wx-config=/home/software/apps/wxWidgets-3.2.5/bin/wx-config \ --enable-openmp --disable-debugmode \ CXXFLAGS="-O2 -fopenmp -Wall -pipe" \ LDFLAGS="-L/home/software/apps/wxWidgets-3.2.5/lib -lgomp" make -j$(nproc) && make install # RELION 5.0 GPUãã«ãïŒãã«ãã«9å匱æéãæããïŒ cd /home/software/src && git clone https://github.com/3dem/relion.git cd relion && git checkout ver5.0 mkdir build-gpu && cd build-gpu cmake .. -DCMAKE_INSTALL_PREFIX=/home/software/apps/relion-gpu-5.0 \ -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda -DGUI=ON -DCUDA=ON \ -DCUDA_ARCH=89 \ -DFETCH_WEIGHTS=OFF \ -DMPI_C_COMPILER=/opt/amazon/openmpi/bin/mpicc \ -DMPI_CXX_COMPILER=/opt/amazon/openmpi/bin/mpicxx make -j$(nproc) && make install # RELION 5.0 CPUãã«ãïŒãã«ãã«6å匱æéãæããïŒ cd /home/software/src/relion mkdir build-cpu && cd build-cpu cmake .. -DCMAKE_INSTALL_PREFIX=/home/software/apps/relion-cpu-5.0 \ -DGUI=ON -DCUDA=OFF \ -DFETCH_WEIGHTS=OFF \ -DMPI_C_COMPILER=/opt/amazon/openmpi/bin/mpicc \ -DMPI_CXX_COMPILER=/opt/amazon/openmpi/bin/mpicxx make -j$(nproc) && make install 4.5.1 Environment Modulesã®èšå® RELIONã®GPU/CPUãã«ãçãEnvironment Modulesã§åãæ¿ããããã®modulefileãäœæããŸãã # relion/gpu modulefile mkdir -p /home/software/modulefiles/relion cat > /home/software/modulefiles/relion/gpu <<'MODEOF' #%Module1.0 proc ModulesHelp { } { puts stderr "RELION 5.0 GPU build (CUDA enabled)" } module-whatis "RELION 5.0 GPU build" conflict relion set basedir /home/software/apps/relion-gpu-5.0 prepend-path PATH $basedir/bin prepend-path LD_LIBRARY_PATH $basedir/lib prepend-path PATH /home/software/apps/ctffind-4.1.14/bin prepend-path PATH /opt/amazon/openmpi/bin prepend-path LD_LIBRARY_PATH /opt/amazon/openmpi/lib64 prepend-path PATH /usr/local/cuda/bin prepend-path LD_LIBRARY_PATH /usr/local/cuda/lib64 setenv RELION_CTFFIND_EXECUTABLE /home/software/apps/ctffind-4.1.14/bin/ctffind MODEOF # relion/cpu modulefile cat > /home/software/modulefiles/relion/cpu <<'MODEOF' #%Module1.0 proc ModulesHelp { } { puts stderr "RELION 5.0 CPU build (no CUDA)" } module-whatis "RELION 5.0 CPU build" conflict relion set basedir /home/software/apps/relion-cpu-5.0 prepend-path PATH $basedir/bin prepend-path LD_LIBRARY_PATH $basedir/lib prepend-path PATH /home/software/apps/ctffind-4.1.14/bin prepend-path PATH /opt/amazon/openmpi/bin prepend-path LD_LIBRARY_PATH /opt/amazon/openmpi/lib64 setenv RELION_CTFFIND_EXECUTABLE /home/software/apps/ctffind-4.1.14/bin/ctffind MODEOF # MODULEPATHã~/.bashrcã«è¿œå echo 'export MODULEPATH=/home/software/modulefiles:${MODULEPATH:-}' >> ~/.bashrc source ~/.bashrc ããã§ä»¥äžã®ã³ãã³ãã§GPU/CPUãã«ããåãæ¿ããããŸãïŒ module load relion/gpu # GPUåŠçïŒ2D/3D Classification, RefinementïŒ module load relion/cpu # CPUåŠçïŒMotion Correction, CTF EstimationïŒ # EC2ãããã°ã¢ãŠã exit 4.6 FSx for Lustreã¹ã«ãŒããã調æŽãšDRAäœæïŒãªãã·ã§ã³ïŒ ãã®ã»ã¯ã·ã§ã³ã¯ãªãã·ã§ã³ã§ããFSx for Lustreã®ã¹ã«ãŒããã調æŽãšS3 Data Repository AssociationïŒDRAïŒã¯ãRELIONã®å®è¡èªäœã«ã¯å¿
é ã§ã¯ãããŸãããGetting Started Templateã§äœæãããFSx for LustreïŒããã©ã«ã125 MB/s/TiBïŒã®ãŸãŸã§ãRELIONãžã§ãã¯æ£åžžã«åäœããŸããå€§èŠæš¡ããŒã¿ã»ããã®åŠçãS3ãšã®åæ¹ååæãå¿
èŠãªå Žåã«èšå®ãå¿
èŠãšãªãã®ã§ãåèã®æé ãšããŠç€ºããŸãã # ã¹ã«ãŒãããæŽæ°ïŒ125 â 250 MB/s/TiBã倿Žå®äºãŸã§æéãæããïŒ aws fsx update-file-system --file-system-id ${FSX_ID} \ --lustre-configuration PerUnitStorageThroughput=250 --region us-east-2 # FSxã®ã³ã³ãœãŒã«ç»é¢ã§ãLustreã®è©²åœãã¡ã€ã«ã·ã¹ãã ã®ã©ã€ããµã€ã¯ã«ã®ç¶æ
ããæŽæ°äžãã«ãªããŸãããããå®äºãããŸã§åŸ
ã€ããšã # S3ãã±ããäœæ AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws s3 mb s3://pcs-relion-data-${AWS_ACCOUNT_ID} --region us-east-2 # DRAäœæïŒåæ¹ååæïŒ aws fsx create-data-repository-association \ --file-system-id ${FSX_ID} \ --file-system-path /shared/data \ --data-repository-path s3://pcs-relion-data-${AWS_ACCOUNT_ID}/datasets/ \ --s3 '{"AutoImportPolicy":{"Events":["NEW","CHANGED","DELETED"]},"AutoExportPolicy":{"Events":["NEW","CHANGED","DELETED"]}}' \ --batch-import-meta-data-on-create --region us-east-2 4.7 CloudWatchç£èŠèšå®ïŒãªãã·ã§ã³ïŒ ãã®ã»ã¯ã·ã§ã³ããªãã·ã§ã³ã§ããCloudWatchç£èŠã¯RELIONã®å®è¡ã«ã¯å¿
é ã§ã¯ãããŸããããSlurmã¹ã±ãžã¥ãŒã©ãŒã®ãã°ç¢ºèªãDRAåæç¶æ
ã®ç£èŠã«æçšã§ãã PCS Scheduler / Job Completion ãã° HPC Recipesã® CloudWatch Log Delivery ãã³ãã¬ãŒãã䜿çšããŠãPCSã®Scheduler LogsãšJob Completion LogsãCloudWatchã«éä¿¡ããŸããããã«ãããSlurmã¹ã±ãžã¥ãŒã©ãŒã®åäœãã°ãšãžã§ãå®äºãã°ãCloudWatchã³ã³ãœãŒã«ãã確èªã§ããŸãã aws cloudformation create-stack \ --stack-name pcs-relion-cloudwatch-logs \ --template-url https://aws-hpc-recipes.s3.us-east-1.amazonaws.com/main/recipes/pcs/cloudwatch/assets/cloudwatch_log_delivery.cfn.yaml \ --parameters ParameterKey=PCSClusterId,ParameterValue=${CLUSTER_ID} \ --capabilities CAPABILITY_NAMED_IAM CAPABILITY_AUTO_EXPAND \ --region us-east-2 äœæãããCloudWatch LogGroupïŒ /aws/vendedlogs/pcs/cluster/PCS_SCHEDULER_LOGS/<CLUSTER_ID> /aws/vendedlogs/pcs/cluster/PCS_JOBCOMP_LOGS/<CLUSTER_ID> 5. ãžã§ãå®è¡äŸ 5.1 ãã¹ãããŒã¿ã»ããã®æºå RELION 5.0å
¬åŒãã¥ãŒããªã¢ã«ã®ãã¹ãããŒã¿ïŒbeta-galactosidaseãEMPIAR-10204ïŒã䜿çšããŸãã # LOGIN NODEã«SSHã§ãã°ã€ã³ããŸãã ssh -i "${YOUR_KEY_NAME}ã眮ãããŠãã絶察ãã¹" ec2-user@${LOGIN_NODE_IP} mkdir -p /shared/relion-test && cd /shared/relion-test wget ftp://ftp.mrc-lmb.cam.ac.uk/pub/scheres/relion30_tutorial_data.tar tar -xf relion30_tutorial_data.tar rm -f relion30_tutorial_data.tar å±éåŸã /shared/relion-test/relion30_tutorial/Movies/ ã«ãã¹ãããŒã¿ïŒ.tiffãã¡ã€ã«ïŒãé
眮ãããŸãã 5.2 Importãžã§ãã®å®è¡ RELIONã§ã¯æåã«Importãžã§ããå®è¡ããŠãåç»ãã¡ã€ã«ã®ãã¹ãšopticsæ
å ±ãSTARãã¡ã€ã«ã«ç»é²ããå¿
èŠããããŸããRELION 5.0ã§ã¯opticsã°ã«ãŒãïŒé»å§ãçé¢åå·®ããã¯ã»ã«ãµã€ãºçïŒãSTARãã¡ã€ã«ã«å¿
é ã§ãã module load relion/cpu cd /shared/relion-test mkdir -p Import/job001 relion_import --do_movies --optics_group_name opticsGroup1 \ --angpix 0.885 --kV 200 --Cs 1.4 --Q0 0.1 \ --beamtilt_x 0 --beamtilt_y 0 \ --i "relion30_tutorial/Movies/*.tiff" \ --odir Import/job001/ --ofile movies.star ãã©ã¡ãŒã¿ã¯RELIONå
¬åŒãã¥ãŒããªã¢ã«ããŒã¿ïŒEMPIAR-10204ãbeta-galactosidaseïŒã®æ®åæ¡ä»¶ã«åºã¥ããŠããŸãïŒ --angpix 0.885 : ãã¯ã»ã«ãµã€ãºïŒÃ
/pixelïŒ --kV 200 : å éé»å§ïŒkVïŒ --Cs 1.4 : çé¢åå·®ïŒmmïŒ --Q0 0.1 : æ¯å¹
ã³ã³ãã©ã¹ãæ¯ Import/job001 以äžã«movies.starãã¡ã€ã«ãäœæãããŠããã°åŠçã¯æåããŠããŸãã 5.3 Motion Correctionã®å®è¡ 5.3.1 RELION GUIããã®ãžã§ãæå
¥ Amazon DCVçµç±ã§LoginNodeã«ãã°ã€ã³åŸã以äžã®ã³ãã³ãã§RELIONã®GUIç»é¢ã衚瀺ãããŸãã # DCVçµç±ã§Login Nodeã«æ¥ç¶åŸ source ~/.bashrc module load relion/cpu cd /shared/relion-test relion & GUIã§ãžã§ããæå
¥ããå ŽåããããããSubmission.shãäœæããŠããå¿
èŠããããŸãã以äžã®ã³ãã³ãã§Templateã®ã·ã§ã«ã¹ã¯ãªãããäœæããŠãããŸãïŒCPU queueã«æããå Žåã®submission.shã§ãïŒã cat > /home/software/apps/relion-submission.sh << 'EOF' #!/bin/bash #SBATCH --ntasks=XXXmpinodesXXX #SBATCH --cpus-per-task=XXXthreadsXXX #SBATCH --time=24:00:00 #SBATCH --partition=XXXqueueXXX #SBATCH --job-name=XXXnameXXX #SBATCH --output=XXXoutfileXXX #SBATCH --error=XXXerrfileXXX source /etc/profile.d/modules.sh export MODULEPATH=/home/software/modulefiles:${MODULEPATH:-} module purge module load relion/cpu export OMP_NUM_THREADS=${SLURM_CPUS_PER_TASK} export OMPI_MCA_rmaps_base_mapping_policy=slot:PE=${SLURM_CPUS_PER_TASK} export OMPI_MCA_hwloc_base_binding_policy=core if [ ${SLURM_NTASKS} -gt 1 ]; then mpirun -np ${SLURM_NTASKS} XXXcommandXXX else XXXcommandXXX fi EOF chmod +x /home/software/apps/relion-submission.sh RELION GUIçµç±ã§PCSã«ãžã§ããæå
¥ããå Žåã¯ãååŠçããã»ã¹ã®Runningã¿ãã§ä»¥äžãèšå®ããå¿
èŠããããŸãã Queue name : gpu-queue ïŒGPUåŠçïŒãŸã㯠cpu-queue ïŒCPUåŠçïŒ Submit to queue? : Yesã«å€æŽãã åèäŸãšããŠGUIã«ããå®è¡äŸã瀺ããŸããMotion correctionã®åŠçãGUIããè¡ãå Žåã§ãã Input movies STAR file:ã«ãImport/job001/movies.starããæå®ãã Runningã¿ããéžæãã以äžã®é
ç®ã倿ŽããŸãã é
ç® èšå®å€ Number of MPI procs 2 Number of threads 4 Submit to queue? Yes Queue name cpu-queue Queue submit command sbatch Standard submission script /home/software/apps/relion-submission.sh 倿ŽåŸãRun!ãã§PCSã«ãžã§ããæå
¥ãããŸãã ä»ã®è§£æåŠçãåæ§ã®GUIæäœã§PCSã«ãžã§ããæå
¥å¯èœã§ãã以éã®RELIONã®ãµã³ãã«å®è¡ã¯CUIããŒã¹ã§èª¬æããŸãããåãåŠçãGUIã§ãè¡ãããšãã§ããŸãã䜿ããããæ¹ãéžã³åŠçãå®è¡ããŠãã ããã 5.3.2 CUIã«ããMotion Correctionã®å®è¡äŸïŒCPUãã¥ãŒã§ã®å®è¡ïŒ Motion Correctionã¯ããã©ã«ãã®ç¶æ
ã§ã¯CPUã§è¡ãããåŠçã«ãªã£ãŠããŸããä»åã®å Žå㯠cpu-queue ã«æå
¥ããŠãã ããã sbatch --partition=cpu-queue --nodes=1 --ntasks=2 --cpus-per-task=4 \ --time=02:00:00 --job-name=relion_motioncorr \ --wrap=" source /etc/profile.d/modules.sh export MODULEPATH=/home/software/modulefiles:\${MODULEPATH:-} module load relion/cpu cd /shared/relion-test mkdir -p MotionCorr/job002 export OMP_NUM_THREADS=\$SLURM_CPUS_PER_TASK BIND_OPTS='--map-by slot:PE='\$SLURM_CPUS_PER_TASK' --bind-to core' mpirun \$BIND_OPTS -np \$SLURM_NTASKS \ relion_run_motioncorr_mpi \ --i Import/job001/movies.star \ --o MotionCorr/job002/ \ --use_own --j \$SLURM_CPUS_PER_TASK \ --patch_x 1 --patch_y 1 --bin_factor 1 \ --dose_per_frame 1.0 --angpix 0.885 " MotionCorr/job002 以äžã«starãã¡ã€ã«ãªã©ãäœæãããŠããã°åŠçã¯æåããŠããŸãã24 micrographsåŠçã¯çŽ2åçšåºŠããããŸãã 5.4 CTF Estimationã®å®è¡äŸïŒCPUãã¥ãŒã§ã®å®è¡ïŒ sbatch --partition=cpu-queue --nodes=1 --ntasks=8 --cpus-per-task=1 \ --time=02:00:00 --job-name=relion_ctf \ --wrap=" source /etc/profile.d/modules.sh export MODULEPATH=/home/software/modulefiles:\${MODULEPATH:-} module load relion/cpu cd /shared/relion-test mkdir -p CtfFind/job003 export OMP_NUM_THREADS=\$SLURM_CPUS_PER_TASK BIND_OPTS='--map-by slot:PE='\$SLURM_CPUS_PER_TASK' --bind-to core' mpirun \$BIND_OPTS -np \$SLURM_NTASKS \ relion_run_ctffind_mpi \ --i MotionCorr/job002/corrected_micrographs.star \ --o CtfFind/job003/ \ --ctffind_exe /home/software/apps/ctffind-4.1.14/bin/ctffind \ --is_ctffind4 --ctfWin 512 --Box 512 \ --ResMin 30 --ResMax 5 --dFMin 1000 --dFMax 50000 --FStep 500 --dAst 100 \ --j \$SLURM_CPUS_PER_TASK " CtfFind/job003 以äžã«epsãstarãã¡ã€ã«ãçæãããŠããã°åŠçã¯æåããŠããŸããCTFæšå®ã®å®äºã«ã¯çŽ1åçšåºŠããããŸãã 5.5 Auto-picking ãš Particle ExtractionïŒCPUåŠçïŒ CTF EstimationåŸã2D Classificationã«é²ãã«ã¯Particle PickingïŒç²åéžæïŒãšExtractionïŒç²åæœåºïŒãå¿
èŠã§ããããã§ã¯RELIONã®LoGïŒLaplacian-of-GaussianïŒãã£ã«ã¿ã«ãããã³ãã¬ãŒãããªãŒã®Auto-pickingã䜿çšããŸãããã¥ãŒããªã¢ã«ããŒã¿ïŒ24 micrographsïŒã§ããã°Login Nodeäžã§æ°åç§ã§å®äºãããããsbatchã§ã¯ãªãçŽæ¥å®è¡ããŸãã # Login Nodeã«SSHæ¥ç¶ããç¶æ
ã§å®è¡ module load relion/cpu cd /shared/relion-test # LoG Auto-pickingïŒãã³ãã¬ãŒãããªãŒãCPUåŠçïŒ mkdir -p AutoPick/job004 relion_autopick \ --i CtfFind/job003/micrographs_ctf.star \ --odir AutoPick/job004/ \ --LoG \ --LoG_diam_min 150 --LoG_diam_max 180 \ --shrink 0 --lowpass 20 \ --LoG_adjust_threshold 0 --LoG_upper_threshold 5 äžèšåŠçã¯30ç§åŒ±ã§çµäºããŸãã AutoPick/job004 ã®äžã«ãã¡ã€ã«ãäœæãããŠããã°åŠçã¯æåããŠããŸãã ä»åæå®ããŠãããã©ã¡ãŒã¿ã®äŸã以äžã«ç€ºããŸãã LoG Auto-pickingã®ãã©ã¡ãŒã¿ïŒ --LoG_diam_min 150 --LoG_diam_max 180 : ç²åã®çŽåŸç¯å²ïŒÃ
ïŒãbeta-galactosidaseã®å Žå150-180Ã
--LoG_adjust_threshold 0 : ãããã³ã°éŸå€ã®èª¿æŽïŒæ£ã®å€ã§å°ãªããè² ã®å€ã§å€ãããã¯ããŸãïŒ --LoG_upper_threshold 5 : é«ã³ã³ãã©ã¹ãæ±æïŒæ°·æ»ŽçïŒãé€å€ããäžééŸå€ # Particle ExtractionïŒ256px â 64pxã«ããŠã³ã¹ã±ãŒã«ïŒ mkdir -p Extract/job005 relion_preprocess \ --i CtfFind/job003/micrographs_ctf.star \ --coord_dir AutoPick/job004/ \ --coord_suffix _autopick.star \ --part_star Extract/job005/particles.star \ --part_dir Extract/job005/ \ --extract --extract_size 256 --scale 64 \ --norm --bg_radius 25 --white_dust -1 --black_dust -1 \ --invert_contrast --float16 äžèšåŠçã¯15ç§çšåºŠã§çµäºããŸãã Extract/job005 ã®äžã«particles.starãã¡ã€ã«ãçæãããŠããã°åŠçã¯æåããŠããŸãã Particle Extractionã®ãã©ã¡ãŒã¿ïŒ --extract_size 256 : æœåºããã¯ã¹ãµã€ãºïŒãã¯ã»ã«ïŒ --scale 64 : 64pxã«ããŠã³ã¹ã±ãŒã«ïŒåæåé¡ã®é«éåã®ããïŒ --bg_radius 25 : èæ¯é åã®ååŸïŒãã¯ã»ã«ãã¹ã±ãŒã«åŸã®ãµã€ãºã«å¯ŸããŠæå®ããŸãã64pxã®çŽ75%÷2ã§25ïŒ --invert_contrast : é»ãç²åãçœã«å転ïŒRELIONå
éšåŠççšïŒ 5.6 2D Classification ã®å®è¡äŸïŒGPUãã¥ãŒã§ã®å®è¡ïŒ 2D Classificationã¯GPUã«ãã£ãŠåŠçãé«éåãããåŠçå·¥çšã§ããä»åäœæãã gpu-queue ã«ãžã§ããæå
¥ããŸãã 5.5ã®Auto-picking + Particle Extractionã§çæããã Extract/job005/particles.star ãå
¥åãšããŠäœ¿çšããŸãã GPU Compute NodeïŒg6e.4xlargeãNVIDIA L40SïŒã§RELIONã®GPUãã«ãã䜿çšããŸããååã®gpu-queueãžã®ãžã§ãæå
¥æã¯ãããŒãèµ·ååŸ
æ©æéãšããŠ5åçšåºŠã€ã³ã¹ã¿ã³ã¹èµ·åã®åŸ
ã¡æéãããããŸãã sbatch --partition=gpu-queue --nodes=1 --ntasks=4 --cpus-per-task=2 \ --gres=gpu:1 \ --time=08:00:00 --job-name=relion_class2d \ --wrap=" source /etc/profile.d/modules.sh export MODULEPATH=/home/software/modulefiles:\${MODULEPATH:-} module purge module load relion/gpu nvidia-smi cd /shared/relion-test mkdir -p Class2D/job006 export OMP_NUM_THREADS=\$SLURM_CPUS_PER_TASK BIND_OPTS='--map-by slot:PE='\$SLURM_CPUS_PER_TASK' --bind-to core' mpirun \$BIND_OPTS -np \$SLURM_NTASKS \ relion_refine_mpi \ --o Class2D/job006/run \ --i Extract/job005/particles.star \ --dont_combine_weights_via_disc \ --pool 30 --pad 2 \ --ctf --iter 25 \ --tau2_fudge 2 \ --particle_diameter 200 \ --K 50 \ --flatten_solvent \ --zero_mask \ --oversampling 1 \ --psi_step 12 --offset_range 5 --offset_step 2 \ --norm --scale \ --j \$SLURM_CPUS_PER_TASK \ --gpu 0 " Class2D/job006 以äžã«åçš®starãã¡ã€ã«ãçæãããŠããã°åŠçã¯æåããŠããŸããGPU Compute NodeïŒg6e.4xlargeïŒã§NVIDIA L40S ã®GPUãæ€åºãããŠããããšã確èªããªãããrelion_refine (GPU) åäœã確èªããæµãã«ãªã£ãŠããŸãã ãªããä»åã®RELIONã®åŠçäŸã¯ãããŸã§ããµã³ãã«å®è¡äŸãšããŠç€ºãããã®ã§ããååŠçå·¥çšã®ãã©ã¡ãŒã¿çã®èšå®ã¯æ±ãããŒã¿ã«ããç°ãªããŸããRELIONã®ãã©ã¡ãŒã¿èšå®ã¯RELIONã®ããã¥ã¢ã«ãªã©ãåèããæ£ç¢ºã«åŠçãè¡ãéã¯é©ããèšå®ãè¡ãå¿
èŠããããŸãã®ã§ããã®ç¹ã¯ãæ¿ç¥ãããã ããã sacctã«ãããžã§ãå±¥æŽç¢ºèª ManagedAccounting=enabledã§ã¯ã©ã¹ã¿ãŒãäœæããŠããã®ã§ãsacctã³ãã³ãã§ãžã§ãã®å®è¡å±¥æŽã確èªã§ããŸãïŒ # å
šãžã§ãå±¥æŽ sacct --format=JobID,JobName,Partition,State,ExitCode,Elapsed,Start,End # ç¹å®ãžã§ãã®è©³çްïŒã¡ã¢ãªäœ¿çšéå«ãïŒ sacct -j <JOB_ID> --format=JobID,State,ExitCode,NodeList,Elapsed,MaxRSS # SSHããã®ãã°ã¢ãŠã exit 6. ã¯ãªãŒã³ã¢ãã æ€èšŒãå®äºãããã以äžã®æé ã§ãªãœãŒã¹ãåé€ããŸããPCSãªãœãŒã¹ã¯äŸåé¢ä¿ããããããåé€é åºãéèŠã§ãã 6.1 PCSãã¥ãŒã®åé€ # CLUSTER_IDã®ååŸ CLUSTER_ID=$(aws cloudformation describe-stacks --stack-name pcs-relion \ --query "Stacks[0].Outputs[?OutputKey=='ClusterId'].OutputValue" \ --output text --region us-east-2) # ãã¥ãŒäžèЧãç¢ºèª aws pcs list-queues --cluster-identifier ${CLUSTER_ID} --region us-east-2 # åãã¥ãŒã®IDãååŸ GPU_QUEUE_ID=$(aws pcs list-queues --cluster-identifier ${CLUSTER_ID} \ --query "queues[?name=='gpu-queue'].id" --output text --region us-east-2) CPU_QUEUE_ID=$(aws pcs list-queues --cluster-identifier ${CLUSTER_ID} \ --query "queues[?name=='cpu-queue'].id" --output text --region us-east-2) # åãã¥ãŒãåé€ aws pcs delete-queue --cluster-identifier ${CLUSTER_ID} --queue-identifier ${GPU_QUEUE_ID} --region us-east-2 aws pcs delete-queue --cluster-identifier ${CLUSTER_ID} --queue-identifier ${CPU_QUEUE_ID} --region us-east-2 6.2 PCS NodeGroupã®åé€ ãã¥ãŒåé€åŸã«NodeGroupãåé€ããŸãã # NodeGroupäžèЧãç¢ºèª aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[].[name,id]" --output table --region us-east-2 # åNodeGroupãåé€ for NG_NAME in login-gpu gpu-nodes cpu-nodes; do NG_ID=$(aws pcs list-compute-node-groups --cluster-identifier ${CLUSTER_ID} \ --query "computeNodeGroups[?name=='${NG_NAME}'].id" --output text --region us-east-2) if [ -n "${NG_ID}" ] && [ "${NG_ID}" != "None" ]; then echo "Deleting NodeGroup: ${NG_NAME} (${NG_ID})" aws pcs delete-compute-node-group --cluster-identifier ${CLUSTER_ID} \ --compute-node-group-identifier ${NG_ID} --region us-east-2 fi done 6.3 Launch Templateã®åé€ aws ec2 delete-launch-template --launch-template-name compute-dlami-pcs-relion --region us-east-2 aws ec2 delete-launch-template --launch-template-name login-gpu-dlami-pcs-relion --region us-east-2 6.4 PCSã¯ã©ã¹ã¿ãŒ + é¢é£ãªãœãŒã¹ã®åé€ïŒCloudFormationã¹ã¿ãã¯ïŒ # PCSã¯ã©ã¹ã¿ãŒã¹ã¿ãã¯ã®åé€ïŒVPCãEFSãFSx Lustreãã»ãã¥ãªãã£ã°ã«ãŒãçãã¹ãŠå«ãïŒ aws cloudformation delete-stack --stack-name pcs-relion --region us-east-2 echo "Waiting for pcs-relion stack deletion (this may take 10-20 minutes)..." aws cloudformation wait stack-delete-complete --stack-name pcs-relion --region us-east-2 echo "pcs-relion stack deleted." # ãªãã·ã§ã³ã§äœæããå Žåã®ã¹ã¿ãã¯ã®åé€ïŒCloudwatchã®Logsã远å ããå Žåã«åé€ãå¿
èŠ) aws cloudformation delete-stack --stack-name pcs-relion-cloudwatch-logs --region us-east-2 # (ãªãã·ã§ã³)ãLustreãšDRAèšå®ãããS3ãã±ããã®åé€(æ ŒçŽãããŠãããã¡ã€ã«ãå«ããŠåé€) AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text) aws s3 rb s3://pcs-relion-data-${AWS_ACCOUNT_ID} --force --region us-east-2 6.5 ImageBuilderã¹ã¿ãã¯ã®åé€ aws cloudformation delete-stack --stack-name dlami-for-pcs --region us-east-2 aws cloudformation wait stack-delete-complete --stack-name dlami-for-pcs --region us-east-2 echo "dlami-for-pcs stack deleted." 6.6 ã«ã¹ã¿ã AMIã®ç»é²è§£é€ïŒãªãã·ã§ã³ïŒ ImageBuilderã§äœæããAMIãäžèŠãªå Žåã¯ç»é²è§£é€ããŸãã # AMI IDãååŸ DLAMI_AMI_ID=$(aws ec2 describe-images \ --owners self \ --filters "Name=name,Values=dlami-for-pcs-base-al2023-x86_64*" \ --query 'Images[*].[ImageId,Name]' \ --output table --region us-east-2) echo "${DLAMI_AMI_ID}" # åAMIãç»é²è§£é€ïŒè€æ°ãã«ãããå Žåã¯è€æ°ååšããå¯èœæ§ããïŒ for AMI_ID in $(aws ec2 describe-images \ --owners self \ --filters "Name=name,Values=dlami-for-pcs-base-al2023-x86_64*" \ --query 'Images[*].ImageId' \ --output text --region us-east-2); do echo "Deregistering AMI: ${AMI_ID}" # é¢é£ããã¹ãããã·ã§ãããååŸ SNAP_IDS=$(aws ec2 describe-images --image-ids ${AMI_ID} \ --query 'Images[0].BlockDeviceMappings[*].Ebs.SnapshotId' \ --output text --region us-east-2) # AMIç»é²è§£é€ aws ec2 deregister-image --image-id ${AMI_ID} --region us-east-2 # é¢é£ã¹ãããã·ã§ããã®åé€ for SNAP_ID in ${SNAP_IDS}; do echo " Deleting snapshot: ${SNAP_ID}" aws ec2 delete-snapshot --snapshot-id ${SNAP_ID} --region us-east-2 done done 6.7 åé€ç¢ºèª # CloudFormationã¹ã¿ãã¯ãæ®ã£ãŠããªããç¢ºèª aws cloudformation list-stacks \ --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE \ --query "StackSummaries[?contains(StackName,'pcs-relion') || contains(StackName,'dlami-for-pcs')].StackName" \ --output text --region us-east-2 # ã«ã¹ã¿ã AMIãæ®ã£ãŠããªããç¢ºèª aws ec2 describe-images --owners self \ --filters "Name=name,Values=dlami-for-pcs*" \ --query 'Images[*].[ImageId,Name]' \ --output table --region us-east-2 7. ã³ã¹ãæé©åã®ãã€ã³ã 7.1 åŠçã¹ãããã«å¿ããã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®éžæ RELIONã®è§£æå·¥çšããšã«CPU/GPUèŠæ±ãç°ãªããããé©åãªã€ã³ã¹ã¿ã³ã¹ã¿ã€ããéžæããããšã§ã³ã¹ãæé©åãå¯èœã§ãã CPUäžå¿ã®åŠç : Motion CorrectionãCTF EstimationãParticle Picking â c7iã€ã³ã¹ã¿ã³ã¹ãªã©ã®CPUã€ã³ã¹ã¿ã³ã¹ GPUäžå¿ã®åŠç : 2D/3D Classificationã3D Refinement â g6eã€ã³ã¹ã¿ã³ã¹ãªã©ã®GPUã€ã³ã¹ã¿ã³ã¹ãçšãã 倧åŠå
±åå©çšæ©é¢æ³äºº é«ãšãã«ã®ãŒå éåšç ç©¶æ©æ§ïŒKEKïŒã«ããç ç©¶è«æã GoToCloud optimization of cloud computing environment for accelerating cryo-EM structure-based drug designïŒMoriya et al., Communications Biology, 2024ïŒ ãã§ã¯ãAWS ParallelClusteräžã§EC2ã€ã³ã¹ã¿ã³ã¹ã¿ã€ãã®äœ¿ãåãã«ããã³ã¹ãããã©ãŒãã³ã¹æé©åãå®èšŒãããå ±åãããŠããŸããPCSã«ãããŠãåæ§ã®ã€ã³ã¹ã¿ã³ã¹éžæã®èãæ¹ãé©çšå¯èœãšèããŸãã ä»å玹ä»ããã¢ãŒããã¯ãã£ãæé ãåèã«RELIONã®åŠçã¹ãããã«å¿ããŠPCSã§äœæããcpu-queueãšgpu-queueã䜿ãåããããšã§ãåŠçæéã®çæéåãšã³ã¹ãæé©åãå³ãããšãã§ããŸãã 7.2 èªåã¹ã±ãŒãªã³ã°ã®æŽ»ç𠿬ããã°ã®æ§æã§ã¯ãGPU/CPUã³ã³ãã¥ãŒãããŒãã°ã«ãŒãã®minInstanceCountã0ã«èšå®ããŠããŸããããã«ããããžã§ããæå
¥ããããšPCSãèªåçã«ã€ã³ã¹ã¿ã³ã¹ãèµ·åãããžã§ãå®äºåŸã¯ã¢ã€ãã«ã¿ã€ã ã¢ãŠãïŒããã©ã«ã10åïŒçµéåŸã«èªåçã«ã€ã³ã¹ã¿ã³ã¹ãçµäºããŸããè§£æãè¡ã£ãŠããªãæé垯ã®ã³ã³ãã¥ãŒãããŒãã®ã³ã¹ãã¯ãŒãã«ãªããŸãã PCSã®èªåã¹ã±ãŒãªã³ã°æ©èœã掻çšããããšã§ãã¢ã€ãã«ã³ã¹ããåæžã§ããŸãã ãžã§ãå®äºåŸã®èªå忢 æšå¥šèšå®: ã¢ã€ãã«ã¿ã€ã ã¢ãŠã5ã10åïŒããã©ã«ãã¯600ç§ã§10åã®èšå®ã§ãïŒ 7.3 å¹ççãªã¹ãã¬ãŒãžã³ã¹ã管çãšS3ã©ã€ããµã€ã¯ã«ç®¡ç å¹ççãªã¹ãã¬ãŒãžã³ã¹ã管çã®ããã以äžã®æŠç¥ãæ¡çšããããšãããããããŸãã S3 + FSx Lustre DRA飿º : å¿
èŠãªããŒã¿ã®ã¿ãFSx Lustreã«ãã£ãã·ã¥ S3ã©ã€ããµã€ã¯ã«ããªã·ãŒ : Intelligent-TieringãGlacierãžã®èªåç§»è¡ FSx Lustreã®äœ¿çšåŸåé€ã»åäœæ : é·æé䜿çšããªãå Žåã¯åé€ããŠã³ã¹ãåæž Cryo-EMããŒã¿ã¯é·æä¿åãå¿
èŠã§ããããã¹ãŠã®ããŒã¿ãé«éã¹ãã¬ãŒãžã«ä¿æãç¶ããå¿
èŠã¯ãªããã®ãšèããŸããS3ã®ã©ã€ããµã€ã¯ã«ç®¡çãæŽ»çšããŠãã³ã¹ããæé©åã§ããŸãã以äžã«ã¹ãã¬ãŒãžã¯ã©ã¹ã®éžææéã®äŸã瀺ããŸãã ã¹ãã¬ãŒãžã¯ã©ã¹ã®éžææéïŒ S3 Standard : ã¢ã¯ãã£ããªåŠçäžã®ããŒã¿ïŒ0-30æ¥ïŒ S3 Intelligent-Tiering : ã¢ã¯ã»ã¹ãã¿ãŒã³ãäžæãªããŒã¿ïŒèªåæé©åïŒ S3 Glacier Flexible Retrieval : å¹Žã«æ°åã¢ã¯ã»ã¹ããããŒã¿ïŒ90æ¥ä»¥éïŒ S3 Glacier Deep Archive : ã»ãšãã©ã¢ã¯ã»ã¹ããªãã¢ãŒã«ã€ãããŒã¿ïŒ1幎以éïŒ èãæ¹ã®åèã«ããŠããã ããã°å¹žãã§ãã 8. çµè« AWS Parallel Computing Serviceã¯ãCryo-EMãã¯ã©ãŠãã§å®è¡ããããã®ã¹ã±ãŒã©ãã«ãªãœãªã¥ãŒã·ã§ã³ãæäŸããç ç©¶è
ãæ°ããç§åŠççºèŠã«éäžã§ããç°å¢ãå®çŸããŸãã æ¬ããã°ã§ã¯ããªãŒãã³ãœãŒã¹ã®Cryo-EMè§£æãœãããŠã§ã¢ã§ããRELIONãPCSäžã§åããæ¹æ³ã玹ä»ããŸãããRELIONã¯äžçäžã®ç ç©¶è
ãèªç±ã«å©çšã§ãããœãããŠã§ã¢ã§ããPCSã®ãããŒãžãSlurmç°å¢ãšçµã¿åãããããšã§ãæ¢åã®SlurmããŒã¹ã®ã¯ãŒã¯ãããŒããã®ãŸãŸã¯ã©ãŠãã«æã¡èŸŒã¿ããªã³ããã³ãã§ã¹ã±ãŒã«ããè§£æç°å¢ãæ§ç¯ã§ããŸãã Amazon DCVã䜿çšããããšã§ãã¯ã©ãŠãäžã®RELION GUIãããŒã«ã«ç°å¢ãšåçã®æäœæã§å©çšã§ããç²åã®éžæãåé¡çµæã®ç¢ºèªãšãã£ãã€ã³ã¿ã©ã¯ãã£ããªäœæ¥ããªã¢ãŒãããå¿«é©ã«è¡ããŸãã AWSäžã®ã¹ã±ãŒã©ãã«ã§ãªã³ããã³ããªã³ã³ãã¥ãŒãã£ã³ã°ã«ãããç§åŠè
ã®ã¢ã€ãã¢ãææ¬²ã®æé·ã«åãããŠèŠæ±ã«å¿ããããšãã§ããŸããåŠçã¹ãããã«å¿ããŠCPUã€ã³ã¹ã¿ã³ã¹ãšGPUã€ã³ã¹ã¿ã³ã¹ã䜿ãåãããžã§ãå®äºåŸã¯ã€ã³ã¹ã¿ã³ã¹ãèªåçã«åæ¢ãããããã³ã¹ãå¹çã®é«ãéçšãå¯èœã§ããAmazon S3ãšAmazon FSx for Lustreã®Data Repository AssociationïŒDRAïŒã掻çšããããšã§ãé«éãªåŠçæ§èœãšäœã³ã¹ããªé·æä¿åãäž¡ç«ã§ããŸãã æ¬ããã°ã§ç޹ä»ããæé ã«æ²¿ã£ãŠãPCSäžã§ã®RELIONã®ãµã³ãã«è§£æç°å¢ãæ§ç¯ãããµã³ãã«ã®åŠçå®è¡ãå¯èœã§ãããã²ãæå
ã®AWSç°å¢ã§ã詊ãããã ããPCSã®æçšæ§ãšRELIONã®è§£æã®æµããã確èªãã ããã 詳现ã«ã€ããŠã¯ãAWSã¢ã«ãŠã³ãããŒã ã«ãåãåããããã ããã ask-hpc@amazon.com ãŸã§ãé£çµ¡ãã ããã èè
ã«ã€ã㊠Tomoya Yamashita å±±äž æºä¹(Tomoya Yamashita)㯠Professional Services ã®ã³ã³ãµã«ã¿ã³ãã§ããå€§èŠæš¡ãªãã€ã°ã¬ãŒã·ã§ã³ãDBãã€ã°ã¬ãŒã·ã§ã³ããŒã ã«æå±ããŠããŸããHPCãLifescienceãMediaãªã©ãCutting-Edgeãªãã€ã°ã¬ãŒã·ã§ã³ã®æšé²ã楜ããã§ããŸãã 奜ããªãã®ã¯ç¬ã§ãã幎ãåã£ããç¬ã®ããã«åããããšæã£ãŠæ¯æ¥ãéãããŠããŸãã Mahiro Tateda 通ç°éº»å¯(Mahiro Tateda)㯠Professional Services æå±ã³ã³ãµã«ã¿ã³ããšããŠãCI/CDãã€ãã©ã€ã³æ§ç¯ããHPCãŸã§å¹
åºãæè¡é åã§ã客æ§ã®å€é©ãæ¯æŽããŠããŸãã ãã®äžã§ããHPCç°å¢ã®æ§ç¯ã»éçšã«æ³šåããŠãããŸãã TAGS: Cryo-EM , Research Computing , Storage , HPC