Unconfigured Ad

Collapse
X
 
  • Time
  • Show
Clear All
new posts

  • santiagorevale
    replied
    Originally posted by Brian Bushnell View Post
    Hi Santiago,

    I will add support for twin files. Possibly this week, time permitting, otherwise probably next week. I find interleaved files much more convenient, but I suppose twin files are more popular overall.

    BBTools changes are in /bbmap/docs/changelog.txt; just search for the current version number.

    -Brian
    Hi Brian,

    Thank you very much for both (quick) replies. I've another question: could you tell me the amount of cores needed to run clumpify? Because I work in a cluster environment (using SGE) and the amount of memory available for a task is related to the number of cores you assign to it.

    Leave a comment:


  • Brian Bushnell
    replied
    @chiayi -

    I've uploaded a new version of BBMap (36.73) that fixes the problem of incorrect memory estimation for .bz2 files. I'd still recommend setting -Xmx to slightly under half your requested memory for your cluster, though. Please let me know if this resolves the problem.

    Leave a comment:


  • Brian Bushnell
    replied
    Hi Santiago,

    I will add support for twin files. Possibly this week, time permitting, otherwise probably next week. I find interleaved files much more convenient, but I suppose twin files are more popular overall.

    BBTools changes are in /bbmap/docs/changelog.txt; just search for the current version number.

    -Brian

    Leave a comment:


  • santiagorevale
    replied
    Originally posted by Brian Bushnell View Post
    OK, I'll make a note of that... there's nothing preventing paired file support, it's just simpler to write for interleaved files when there are stages involving splitting into lots of temp files. But I can probably add it without too much difficulty.
    Hi Brian,

    I was wondering if you have any plans for developing the above mentioned change in a short while (and if yes, when?), because I'm eager to implement Clumpify on our rawdata but I don't like the idea of having to go interleaved and then back. We deal daily with Tb of data and all our pipelines are set for twin paired-end files.

    Also, where can I find what are the changes introduced in each implementation of BBtools?

    Thank you very much for your effort!

    Leave a comment:


  • Brian Bushnell
    replied
    OK, I figured out the problem. Clumpify initially decides whether or not to split the file into multiple groups depending on whether it will fit into memory. The memory estimation was taking into account gzip compression, but NOT bz2 compression. That's a very easy fix.

    That only solves the last error (java.lang.OutOfMemoryError: GC overhead limit exceeded), not the first two. But once I fix it the last command will run fine.

    As for the first two errors, it looks like those are due to your cluster configuration being to aggressive about killing jobs; I recommend any type of job for which you see that message (which might just be limited to running BBTools on bz2 files) you use the -Xmx parameter with slightly under half of the ram you requested (e.g. -Xmx7g when requesting 16 GB).
    Last edited by Brian Bushnell; 12-18-2016, 10:03 AM.

    Leave a comment:


  • chiayi
    replied
    I would love that. I will send the access to you in message momentarily. Thank you so much!

    Leave a comment:


  • Brian Bushnell
    replied
    Dear chiayi,

    Is this data confidential, or is it possible for you to send it to me? I would really like to eliminate this kind of bug, but I'm not sure I can do it without the data that triggers the problem.

    Leave a comment:


  • chiayi
    replied
    Thank you so much for the thorough explanation. I tried a couple things and please find the reports as follows:

    Originally posted by Brian Bushnell View Post
    Personally, I consider this to be a major bug in the job schedulers that have this behavior. Also, not allowing programs to over-commit virtual memory (meaning, use more virtual memory than is physically present) is generally a very bad idea. Virtual memory is free, after all. What job scheduler are you using? And do you know what your cluster's policy is for over-comitting virtual memory?
    I'm not sure about the answers to these two questions. I will need to ask around and get back to you.

    Anyway, please try with requesting 48GB and using the -Xmx12g flag (or alternately requesting 16GB and using -Xmx4g) and let me know if that resolves the problem.
    Still ran out of memory with 48GB r'q and -Xmx12g tag:

    HTML Code:
    java.lang.OutOfMemoryError: GC overhead limit exceeded
        at stream.FASTQ.makeId(FASTQ.java:567)
        at stream.FASTQ.quadToRead(FASTQ.java:785)
        at stream.FASTQ.toReadList(FASTQ.java:710)
        at stream.FastqReadInputStream.fillBuffer(FastqReadInputStream.java:111)
        at stream.FastqReadInputStream.nextList(FastqReadInputStream.java:96)
        at stream.ConcurrentGenericReadInputStream$ReadThread.readLists(ConcurrentGenericReadInputStream.java:656)
        at stream.ConcurrentGenericReadInputStream$ReadThread.run(ConcurrentGenericReadInputStream.java:635)
    
    This program ran out of memory.
    Try increasing the -Xmx flag and using tool-specific memory-related parameters.
    So if you need to set -Xmx manually because the memory autodetection does not work (in which case, I'd like to hear the details about what the program does when you don't define -Xmx, because I want to make it as easy to use as possible) then please allow some overhead.
    When I requested 16GB and did not specify -Xmx, the program matched the requested memory,
    java -ea -Xmx17720m -Xms17720m -cp

    Leave a comment:


  • Brian Bushnell
    replied
    It looks like in both cases, Clumpify did not run out of memory, but was killed by your job scheduling system or OS. This can happen sometimes when the job scheduler is designed to instantly kill processes when virtual memory exceeds a quota; it used to happen on JGI's cluster until we made some adjustments. The basic problem is this:

    When Clumpify (or any other program) spawns a subprocess, that uses a fork operation, and the OS temporarily allocates twice the original virtual memory. It seems very strange to me, but here's what happens in practice:

    1) You run Clumpify on a .bz2 file, and tell Clumpify to use 16 GB with the flag -Xmx16g, or similar. Even if it only needs 2GB of RAM to store the input, it will still use (slightly more than) 16 GB of virtual memory.
    2) Clumpify sees that the input file is .bz2. Java cannot natively process bzipped files, so it starts a subprocess running bzip2 or pbzip2. That means a fork occurs and for a tiny fraction of a second the processes are using 32GB of virtual memory (even though at that point nothing has been loaded, so the physical memory being used is only 40 MB or so). After that fraction of a second, Clumpify will still be using 16 GB of virtual memory and 40 MB of physical memory, and the bzip2 process will be using a few MB of virtual and physical memory.
    3) The job scheduler looks at the processes every once in a while to see how much memory they are using. If you are unlucky, it might look right at the exact moment of the fork. Then, if you only scheduled 16 GB and are using 32 GB of virtual memory, it will kill your process, even though you are only using 40 MB of physical memory at that time.

    Personally, I consider this to be a major bug in the job schedulers that have this behavior. Also, not allowing programs to over-commit virtual memory (meaning, use more virtual memory than is physically present) is generally a very bad idea. Virtual memory is free, after all. What job scheduler are you using? And do you know what your cluster's policy is for over-comitting virtual memory?

    I think that in this case the system will allow the program to execute and not kill it if you request 48 GB, but add the flag "-Xmx12g" to Clumpify. That way, even when it uses a fork operation to read the bzipped input, and potentially another fork operation to write the gzipped output with pigz, it will still stay under the 48 GB kill limit. Alternately you could decompress the input before running Clumpify and tell it not to use pigz with the pigz=f flag, but I think changing the memory settings is a better solution because that won't affect speed.

    As for the 25% file size reduction - that's fairly low for NextSeq data with binned quality scores; for gzip in and gzip out, I normally see ~39%. Clumpify can output bzipped data if you name the output file as .bz2; if your pipeline is compatible with bzipped data, that should increase the compression ratio a lot, since .bz2 files are smaller than .gz files. Of course, unless you are using pbzip2 the speed will be much lower; but with pbzip2 and enough cores, .bz2 files compress fast and decompress even faster than .gz.

    Anyway, please try with requesting 48GB and using the -Xmx12g flag (or alternately requesting 16GB and using -Xmx4g) and let me know if that resolves the problem.

    Oh, I should also mention that if you request 16GB, then even if the program is not doing any forks, you should NOT use the flag -Xmx16g, you should use something like -Xmx13g (roughly 85% of what you requested). Why? -Xmx16g sets the heap size, but Java needs some memory for other things too (like per-thread stack memory, memory for loading classes, memory for the virtual machine, etc). So if you need to set -Xmx manually because the memory autodetection does not work (in which case, I'd like to hear the details about what the program does when you don't define -Xmx, because I want to make it as easy to use as possible) then please allow some overhead. Requesting 16GB and using the flag -Xmx16G is something I would expect to always fail on systems that to not allow virtual memory overcommit. In other words, possibly, your first command would work fine if you just changed the -Xmx16g to -Xmx13g.

    Leave a comment:


  • chiayi
    replied
    Hello Brian,

    I started to use clumpify and the size was on average reduced ~25% for NextSeq Arabidopsis data. Thanks for the development!

    In a recent run for HiSeq maize data, I got an error for some (but not all) of the files. At first the run would stuck at fetching and eventually fail due to not enough memory (set 16G), despite the memory estimate was ~ 2G.

    HTML Code:
    Clumpify version 36.71
    Memory Estimate:        2685 MB
    Memory Available:       12836 MB
    Set groups to 1
    Executing clump.KmerSort [in=input.fastq.bz2, out=clumped.fastq.gz, groups=1, ecco=false, rename=false, shortname=f, unpair=false, repair=false, namesort=false, ow=true, -Xmx16g, reorder=t]
    
    Making comparator.
    Made a comparator with k=31, seed=1, border=1, hashes=4
    Starting cris 0.
    Fetching reads.
    Making fetch threads.
    Starting threads.
    Waiting for threads.
    =>> job killed: mem job total 17312912 kb exceeded limit 16777216 kb
    When I increased to 48G, the run was killed at making clumps and didn't have a specific reason,

    HTML Code:
    Starting threads.
    Waiting for threads.
    Fetch time:     321.985 seconds.
    Closing input stream.
    Combining thread output.
    Combine time:   0.108 seconds.
    Sorting.
    Sort time:  33.708 seconds.
    Making clumps.
    /home/cc5544/bin/clumpify.sh: line 180: 45220 Killed
    Do you know what may be the cause of this situation? Thank you.

    Leave a comment:


  • Brian Bushnell
    replied
    OK, I'll make a note of that... there's nothing preventing paired file support, it's just simpler to write for interleaved files when there are stages involving splitting into lots of temp files. But I can probably add it without too much difficulty.

    Leave a comment:


  • sklages
    replied
    Interesting tool. Though I'd wish it could deal with "twin files", as these are the initial "raw files" of Illumina's bcl2fastq output. Additionally many tools require the pairs to be separated ... converting back and forth :-)

    Leave a comment:


  • Brian Bushnell
    replied
    I ran some benchmarks on 100x NextSeq E.coli data, to compare file sizes under various conditions:



    This shows the file size, in bytes. Clumpified data is almost as small as mapped, sorted data, but takes much less time. The exact sizes were:
    Code:
    100x.fq.gz	360829483
    clumped.fq.gz	251014934
    That's a 30.4% reduction. Note that this was for NextSeq data without binned quality scores. When the quality scores are binned (as is the default for NextSeq) the increase in compression is even greater:

    Code:
    100x_binned.fq.gz	267955329
    clumped_binned.fq.gz	161766626
    ...a 39.6% reduction. I don't recommend quality-score binning, though Clumpify does have the option of doing so (with the quantize flag).



    This is the script I used to generate these sizes and times:
    Code:
    time clumpify.sh in=100x.fq.gz out=clumped_noreorder.fq.gz
    time clumpify.sh in=100x.fq.gz out=clumped.fq.gz reorder
    time clumpify.sh in=100x.fq.gz out=clumped_lowram.fq.gz -Xmx1g
    time clumpify.sh in=100x.fq.gz out=clumped.fq.bz2 reorder
    time reformat.sh in=100x.fq.gz out=100x.fq.bz2
    time bbmap.sh in=100x.fq.gz ref=ecoli_K12.fa.gz out=mapped.bam bs=bs.sh; time sh bs.sh
    reformat.sh in=mapped_sorted.bam out=sorted.fq.gz zl=6
    reformat.sh in=mapped_sorted.bam out=sorted.sam.gz zl=6
    reformat.sh in=mapped_sorted.bam out=sorted.fq.bz2 zl=6
    Attached Files

    Leave a comment:


  • Brian Bushnell
    replied
    Whether you use Clumpify or CD-Hit, I'd be very interested if you could post the file size results before and after.

    Incidentally, you can use BBTools to do AA <-> NT translation like this:

    Code:
    translate6frames.sh in=proteins.faa.gz aain=t aaout=f out=nt.fna
    clumpify.sh in=nt.fna out=clumped.fna
    translate6frames.sh in=clumped.fna out=protein2.faa.gz frames=1 tag=f zl=6

    Leave a comment:


  • GenoMax
    replied
    Originally posted by Markiyan View Post
    OK, so in order to cluster aminoacid sequences with current clumpify version it means:
    1. parse fasta, reverse translate to DNA. Using a single codon for each aminoacid;
    2. save as nt fastq;
    3. clumpify;
    4. parse fastq, translate;
    5. save as aa fasta.
    Or you could just use CD-HIT.

    Leave a comment:

Latest Articles

Collapse

  • SEQadmin2
    Multiomic Liquid Biopsy: What DNA/RNA Panels Reveal That DNA Alone Can’t
    by SEQadmin2



    Tumors contain complex mixtures of cell populations that evolve in response to treatment and host-specific factors. Tissue biopsies provide only static snapshots of a tumor’s state. But what if we could follow that evolution over time using a minimally invasive technique?

    Liquid biopsies can detect tumor-derived material circulating in the bloodstream, providing a way to study treatment response, detect emerging resistance, and discover new biomarkers. Circulating
    ...
    10-14-2026, 09:55 AM

ad_right_rmr

Collapse

News

Collapse

Topics Statistics Last Post
Started by SEQadmin2, 10-28-2026, 09:57 AM
0 responses
21 views
0 reactions
Last Post SEQadmin2  
Started by SEQadmin2, 10-28-2026, 09:51 AM
0 responses
14 views
0 reactions
Last Post SEQadmin2  
Started by SEQadmin2, 10-22-2026, 11:13 AM
0 responses
67 views
0 reactions
Last Post SEQadmin2  
Started by SEQadmin2, 10-22-2026, 10:48 AM
0 responses
47 views
0 reactions
Last Post SEQadmin2  
Working...