We're sorry but this page doesn't work properly without JavaScript enabled. Please enable it to continue.
Feedback

Buildtest: HPC Software Stack Testing Framework

00:00

Formale Metadaten

Titel
Buildtest: HPC Software Stack Testing Framework
Serientitel
Anzahl der Teile
490
Autor
Lizenz
CC-Namensnennung 2.0 Belgien:
Sie dürfen das Werk bzw. den Inhalt zu jedem legalen Zweck nutzen, verändern und in unveränderter oder veränderter Form vervielfältigen, verbreiten und öffentlich zugänglich machen, sofern Sie den Namen des Autors/Rechteinhabers in der von ihm festgelegten Weise nennen.
Identifikatoren
Herausgeber
Erscheinungsjahr
Sprache

Inhaltliche Metadaten

Fachgebiet
Genre
Abstract
HPC support teams are often tasked with installing scientific software for their user community and the complexity of managing a large software stack gets very challenging. Software installation brings forth many challenges that requires a team of domain expertise and countless hours troubleshooting to build an optimal software state that is tuned to the architecture. In the past decade, two software build tools (Easybuild, Spack) have emerged that are widely accepted in HPC community to accelerate building a complete software stack for HPC systems. The support team are constantly involved in fulfilling software request for end-users which leads to an ever-growing software ecosystem. Once a software is installed, the support team hands it off to the user without any testing because scientific software requires domain expertise in order to test software. Some software packages are shipped with a test suite that can be run at post build while many software have no mechanism for testing. This poses a knowledge gap between HPC support team and end-users on the type of testing to do. Some HPC centers may have developed in-house test scripts that are suitable for testing their software, but these tests are not portable due to hardcoded paths and are often site dependent. In addition, there is no collaboration between HPC sites in building a test repository that will benefit the community. In this talk I will presents buildtest, a framework to automate software testing for a software stack along with several module operations that would be of interest to the HPC support team.
33
35
Vorschaubild
23:38
52
Vorschaubild
30:38
53
Vorschaubild
16:18
65
71
Vorschaubild
14:24
72
Vorschaubild
18:02
75
Vorschaubild
19:35
101
Vorschaubild
12:59
106
123
Vorschaubild
25:58
146
Vorschaubild
47:36
157
Vorschaubild
51:32
166
172
Vorschaubild
22:49
182
Vorschaubild
25:44
186
Vorschaubild
40:18
190
195
225
Vorschaubild
23:41
273
281
284
Vorschaubild
09:08
285
289
Vorschaubild
26:03
290
297
Vorschaubild
19:29
328
Vorschaubild
24:11
379
Vorschaubild
20:10
385
Vorschaubild
28:37
393
Vorschaubild
09:10
430
438
Framework <Informatik>SupercomputerKeller <Informatik>SoftwareSignifikanztestDiskrete-Elemente-MethodeWeb-DesignerKeller <Informatik>SoftwareFramework <Informatik>Vollständiger VerbandSignifikanztestComputeranimation
Framework <Informatik>Konvexe HülleKeller <Informatik>SoftwareSignifikanztestSupercomputerPhysikalisches SystemBimodulAuszeichnungsspracheProzessautomationNabel <Mathematik>Framework <Informatik>DokumentenserverAuszeichnungsspracheStatistischer TestGemeinsamer SpeicherBimodulPhysikalisches SystemRechenzentrumSignifikanztestKartesische KoordinatenSoftwarePunktSupercomputerSkriptspracheMigration <Informatik>BitWeb SiteComputeranimation
Framework <Informatik>DokumentenserverOpen SourceElektronische PublikationKonfigurationsraumSkriptspracheBeschreibungskomplexitätMobiles EndgerätOperations ResearchGebäude <Mathematik>Statistischer TestSignifikanztestNichtlinearer OperatorRechenschieberAuszeichnungsspracheKonfigurationsraumSkriptspracheWeb SiteFramework <Informatik>Programm/QuellcodeXML
Data MiningKonvexe HülleFramework <Informatik>Arithmetisches MittelBimodulElektronische PublikationSchlüsselverwaltungKonfigurationsraumRechter WinkelGebäude <Mathematik>ProgrammMAPNabel <Mathematik>SignifikanztestCodeStatistischer TestFlächeninhaltCompilerCASE <Informatik>Sampler <Musikinstrument>PermutationGeradeVerzeichnisdienstFramework <Informatik>SkriptsprachePhysikalisches SystemComputeranimation
Übersetzer <Informatik>SkriptspracheKonfigurationsraumQuellcodeFramework <Informatik>Konvexe HülleSignifikanztestGebäude <Mathematik>MaßerweiterungElektronische PublikationVerzeichnisdienstStatistischer TestDatenstrukturKonfigurationsraumDokumentenserverSuite <Programmpaket>MaßerweiterungQuellcodeOpen SourceGrenzschichtablösungOrdnung <Mathematik>
Konvexe HülleFramework <Informatik>KonfigurationsraumSignifikanztestDeskriptive StatistikCompilerParametersystemCodeFahne <Mathematik>ProgrammierumgebungNabel <Mathematik>KonfigurationsraumOrdnung <Mathematik>SchlüsselverwaltungEinfache GenauigkeitSchedulingGarbentheorieProgrammQuellcodeOpen SourceStatistischer TestMessage-PassingGeradeComputeranimation
IntelStatistischer TestFahne <Mathematik>BimodulQuellcodeInhalt <Mathematik>Computeranimation
LastSignifikanztestBimodulFramework <Informatik>LoginFramework <Informatik>Elektronische PublikationSoftwareKeller <Informatik>LastSpider <Programm>SignifikanztestBimodulProzessautomationStatistischer TestGebäude <Mathematik>Computeranimation
Framework <Informatik>SupercomputerKonfigurationsraumLineare RegressionSignifikanztestSoftwareVersionsverwaltungStatistischer TestDifferenteSignifikanztestLineare RegressionVersionsverwaltungComputeranimation
Motion CapturingFramework <Informatik>Konvexe HülleExplosion <Stochastik>VerkehrsinformationComputeranimation
Desintegration <Mathematik>GruppenoperationCodeTeilbarkeitComputersicherheitURLFramework <Informatik>AdressraumStrom <Mathematik>Lineare RegressionSignifikanztestVariableSampler <Musikinstrument>PermutationFahne <Mathematik>ProgrammierumgebungSpannweite <Stochastik>Open SourceÜbersetzer <Informatik>ThreadCodierungIntegralFramework <Informatik>DifferenteGrenzschichtablösungVerschlingungStatistischer TestComputerspielMultiplikationSpannweite <Stochastik>Sampler <Musikinstrument>CodeRoboterEinsInverser LimesSoftwarewartungOffene MengeOpen SourceProgrammierumgebungVariableProjektive EbeneComputeranimation
Hill-DifferentialgleichungBimodulGebäude <Mathematik>TermStatistischer TestMultiplikationsoperatorLast
PunktwolkeFacebookOpen SourceComputeranimation
Transkript: Englisch(automatisch erzeugt)
All right, let's continue with our second lightning talk. We have Shazeh presenting us BuildTest. All right, thank you for joining. My name is Shazeh Bsiddiqui. I am the lead developer of BuildTest, which is an HPC software stack testing framework.
So let's get started. I'll give you a little bit of background about how BuildTest started. It started around 2017, where I was testing some applications for our HPC system, and we were doing a data center migration. So I was tasked to do a lot of, just basic testing of software.
So I used to write shell scripts. So I found that at some point, that we need to have a framework that can automate the testing procedure, because I want to be able to share these tests. And the framework has to be tightly coupled with a module system, because we use modules, and a lot of other HPC systems use modules too. I find that writing shell scripts,
you know, they were hard-coded. I can't share with another site that we also have. We have multiple sites, and I find that if I were to share them with the community, it has to be in some kind of markup language, markup language that can be put on GitHub, and then somebody else can use it
to write their test on their site. The framework has to be able to automate the test creation and execution, right? So you have several shell scripts. You just want to be able to automate this through some kind of automation tool. And the framework has to be able to provide a repository. A framework without tests is useless, right?
So have a collection of tests that is community-driven. Now, one point to make out is that build tests are not meant to replace tools like Make, CMake, AutoConf, their purpose are like build frameworks, and build tests is targeting for just HPC software.
So what is build tests? It is a framework that automates test script creation. It uses YAML as its markup language so users can write their test configuration. The tests are portable. You can use somebody else's test configuration and then use it at your site with adjustments so that it works, and it provides many module operations.
In this talk, I'll give you two of these operations. And it comes with a repository of tests. On the left, that's the documentation on build tests, so on Read the Docs, and if you're interested in the same talk, extended one, I presented one, Easy Build User Meeting, and you can find the slides in the documentation.
So I'll talk about kind of like the build pipeline. As I mentioned, so a user right here will write a test configuration. It's in YAML. You'll pass it into the framework. The framework will load the YAML file. The first thing it will do is it'll kind of do a schema check on the YAML file.
Check the key value pair. It'll check and also parse the YAML file so that it can be set up for the actual build. In the build, it will actually do a staging area where it will pre-create some of the directories where it will write the test, detect the programming language, which is important because it needs to be able
to find how you can compile the code. Detecting the programming language, then the compiler and MPI if needed, and then it'll generate the compilation line and actually generate the test script. Test script in this case is a shell script. And since we're using modules, build test has several ways you can actually inject modules.
One of them is active modules and user collections, an Lmod user collection if you're familiar with that. Build test implements its own module collection system and add this to the Lmod user collection, and it has also module permutation as another means. And then finally, it will write the test, and then you can actually run it.
So how you build the test? Well, the command is called build test build, and then you have many options, and one of them is dash C is for config, and then you pass in the configuration. On the very left, you can see like a directory layout of the test configuration. So when you clone build test, you actually get a repository.
At the root, there is a directory toolkit suite where I put all the tests, and then you would see a directory structure with subdirectories. One of them, like for instance, you have a YAML file in the tutorial compilers, and then there is a file called args.c.yaml. So that's one of the configuration file,
and in order to generate it, I mean to actually use it, you're just separating that file separator with a dot so then you can actually run it. You will see there's a source directory, SRC, where you actually have the source code used to actually compile whatever you're compiling, and all the test configuration are in dot YAML extension.
So here's an example of a test configuration written in YAML. The first line says, okay, we're gonna do a single source compilation, so one source file, and then you compile it. This is gonna be basically a C program in GNU.
The description key just tells just a brief description of the test, and you can write anything you want in it. The scheduler just tells you wanna run this locally. Scheduler is local, but you can also tie into LSF or SLURM, and then the program section
is where you actually declare the start of the configuration. Compiler is just a keyword that says, okay, what compiler do I wanna use? And it's just the name of the compiler. In this case, it's GNU. We have to pass in a source file in order to compile. So in this case, it's args.c.
We can declare the environment variable, so in your shell script, if you wanna say, I wanna say foo equals bar, X equals one. It's just a key value pair. The prebuild and postbuild are sections where you can put in shell commands, so before and after the build, passing in flags to the C compiler, the C flags,
and then prerun and postrun are shell commands before and after the execution of the code. You can pass in arguments to the executable. In this case, I'm passing in hello world into the program, and that's pretty much it.
Here's an example of, Intel example of hello world, a different one. You can see there's, you know, you have compiler. You can set it to Intel in this example, and I'm also showing you how you can pass in, like for instance, Fortran flags, in this case, F flags. You can see some of these arrows. What it's doing is actually writing FC for,
in this case, I4. It automatically finds that out. You have the source file. On the top, you can see how we inject modules. In this example, we're using Lmod user collection, so in this one, a user has an Intel module collection, and then you can see that it's doing a module restore.
Every test will purge and then load the modules in some way. This example is doing a dry run, so it's just printing out the content without actually writing the test, and if you remove it, it will actually generate it. One of the cool features that I like about this framework
is it can automate module load testing over an entire software stack. In HPC, you have thousands of software. Well, there's one command I can do it that will test everything. It's called build test module load test, and this example is actually doing it in a login shell, and you can control how many tests you wanna do.
In this one, I say I'm gonna do five tests. It will just run every single one. It will show you the actual command that's being run, so you can actually copy and run it, and it will tell you which module file is actually being tested. Now, this is actually being done because it's parsing the spider from Lmod
and being able to find all the modules and then properly finding a way to load them, and if you're interested, I have more examples in the documentation. Build test also has some regression testing. We use a Travis.
We also test for Python 3.6, 3.7, 3.8, and we have to also test for different Lmod versions, so I'm picking one version of Lmod 6 and 7. We also have coverage report. On the left, you see this is coveralls. It provides a lot of coverage statistics, very in-depth.
On the middle, there's CodeCov, and then on the far left is the CodeCov bot, so it provides the coverage report in pull requests. And I have to also mention some of the other integrations that we have. So some of the other ones,
like for instance, we have CodeFactor. For security, we have SNX and Guardrails. We have several bot integrations. If you're interested, we have them in the marketplace. IssueLabelBot and Stale, they're for managing issues in GitHub. Trafico and pull request size are for managing pull requests in your project,
so how to actually do a workflow around pull request merge, commit, et cetera. The ones that I really like are blackcodeformatter. It auto-formats your Python code, so if you have a lot of maintainers writing codes in different ways, black will just do it in one way, and it really helps your life. And URLChecker is pretty cool.
You have a lot of URLs, links in your documentation on project. It will just check everything and tell you which ones you need to fix. And some future work. The schema has some limitation. I wanted to be able to do some interesting stuff that it doesn't do right now, so the challenge is trying to make the framework as easily usable.
So for instance, declaring variables, doing permutations, multiple compilations, multiple compilation flags, multiple runs, permuting them with environment variables or even with multiple compilers. Or if you have one test and you want to run it with a range of values, for instance, like compile some open MP code
and you want to test it with multiple ranges, or doing multiple source compilation. And I think this is my last slide, and then if you're interested for references, you can check them out. Thank you. Thank you very much.
So we have time for one or two questions. Any questions? Maybe Kenneth has a question.
I can come up with a question, yeah. How does this compare to other test tools that are in HPC, like reframe, for example? Do you think it's similar, or? It is very similar. In terms of the building part, yes, it is very similar. I think one thing that distinguishes build test
from reframe is the way it does the module load problem. So it uses Spyder to actually detect it. And the nice thing is that Spyder will fix all the problems for you with different module naming schemes,
or even if you install new modules, Spyder's up to date, and that's how it figures out all the modules. There was one question, Todd, I'm sorry. Yeah, we have to switch, yeah. Unfortunately, the answer was too long, so. All right, thank you. Next talk is coming up in three minutes.